今天就一个题目,做完吃完饭抓紧做六级试题。
Leetcode 738. 单调递增的数字
题目链接 738 单调递增的数字
本题目思路还是比较巧妙的,对于98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]--,然后strNum[i]给为9,这样这个整数就是89,即小于98的最大的单调递增整数。剩下还需要几个主要的点,在注释中会说明:
class Solution {
public:int monotoneIncreasingDigits(int n) {string strNum = to_string(n);//这里是将int类型转化为字符串类型int flag = strNum.size();//设置为这个默认值,为了防止第二个for循环在flag没有被赋值的情况下执行,太强了for(int i=strNum.size()-1;i>0;i--){if(strNum[i-1]>strNum[i]){flag = i;strNum[i-1]--;}}for(int i=flag;i<strNum.size();i++){strNum[i] = '9';}return stoi(strNum); //是将字符串转化为十进制 int 类型}
};
贪心小总结:
遇到贪心的题目做法就是怎么将利益做到最大化,从局部到整体利益最大化的一个过程
今天必须拿下六级