其他分享
首页 > 其他分享> > 738. 单调递增的数字(中等,贪心)

738. 单调递增的数字(中等,贪心)

作者:互联网

题目链接:738. 单调递增的数字
在这里插入图片描述
思路一:暴力破解,每次减1一个一个数判断

class Solution {
	//暴力破解  
	//时间复杂度:O(nm)  m为n的数字长度
	//空间复杂度:O(1)
public:
	bool checkNum(int num) {
		int low_pos = 10;

		while (num) {
			int temp_pos = num % 10;

			if (low_pos >= temp_pos) low_pos = temp_pos;
			else return false;      //如果低位比高位小 false

			num = num / 10;
		}

		return true;
	}

	int monotoneIncreasingDigits(int N) {
		for (int i = N; i > 0; i--) {    //一个一个判断
			if (checkNum(i)) return i;
		}
		return 0;
	}
};

思路二:贪心

class Solution {
public:
	int monotoneIncreasingDigits(int N) {
		string strNum = to_string(N);   //数字转字符串  string头文件的函数

		// flag用来标记赋值9从哪里开始
		// 设置为这个默认值,为了防止第二个for循环在flag没有被赋值的情况下执行
		int flag = strNum.size();
		for (int i = strNum.size() - 1; i > 0; i--) {    //必须从后面遍历到前面  反过来实现不了
			if (strNum[i - 1] > strNum[i]) {  //前一位>后一位
				flag = i;                     //后一位改9
				strNum[i - 1]--;              //332   ->  322   ->  222
			}
		}

		for (int i = flag; i < strNum.size(); i++) {  //标记位置开始改9
			strNum[i] = '9';
		}

		return stoi(strNum);  //字符串转数字
	}
};

标签:return,int,pos,flag,num,strNum,738,单调,贪心
来源: https://blog.csdn.net/qq_39236499/article/details/121864767