給定乙個非負整數 n,找出小於或等於 n 的最大的整數,同時這個整數需要滿足其各個位數上的數字是單調遞增。
(當且僅當每個相鄰位數上的數字 x 和 y 滿足 x <= y 時,我們稱這個整數是單調遞增的。)
示例 1:輸入: n = 10
輸出: 9
示例 2:輸入: n = 1234
輸出: 1234
示例 3:輸入: n = 332
輸出: 299
說明: n 是在 [0, 10^9] 範圍內的乙個整數
問題分析:
可以先找到第乙個前面的數大於後面的數,如何前面的數減1,在比較前面的前面的數。
例如:132456
第乙個大於的數是3和2,此時i=2
所以3-1=2,此時比較1和3-1=2,發現1比它小,就不進行比較了
最後把剩餘的數字全變成9
所以最後結果是129999
**如下:
class
solution
}for
(i+=
1;i)//stoi是把n進製的字串轉化成十進位制的整數
return
stoi
(strs);}
};
**to_string **將數值轉化成相應的字串string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);
stoi將n進製的字串轉換成十進位制數字stoi(字串,起始位置,n進製),將 n 進製的字串轉化為十進位制
stoi(str, 0, 2); //將字串 str 從 0 位置開始到末尾的 2 進製轉換為十進位制**
stoi函式會做範圍檢查,所需轉換的數字如果超出int範圍,即超出[-2147483648,2147483648],會出現runtime error!!!to_string和stoi的標頭檔案是#include所以當題目輸入字串長度大於等於10位時,一定要注意!
乙個可行的解決方法是使用stoll函式代替stoi,將string轉化為long long int。
leetcode 738 單調遞增的數字
描述 給定乙個非負整數 n,找出小於或等於 n 的最大的整數,同時這個整數需要滿足其各個位數上的數字是單調遞增。當且僅當每個相鄰位數上的數字 x 和 y 滿足 x y 時,我們稱這個整數是單調遞增的。示例 1 輸入 n 10 輸出 9 示例 2 輸入 n 1234 輸出 1234 示例 3 輸入 n...
leetCode 738 單調遞增的數字
給定乙個非負整數 n,找出小於或等於 n 的最大的整數,同時這個整數需要滿足其各個位數上的數字是單調遞增。當且僅當每個相鄰位數上的數字 x 和 y 滿足 x y 時,我們稱這個整數是單調遞增的。示例 1 輸入 n 10輸出 9示例 2 輸入 n 1234 輸出 1234示例 3 輸入 n 332輸出...
LeetCode738單調遞增的數字
看到題目就想到了應該使用貪心,但是怎麼貪心卻不是很容易構思,分析一下題意,要找的是小於n的最大的數,並且這個數滿足從最高位到最低為非嚴格遞增 x y叫做非嚴格遞增 因為數字要求滿足的性質是對數的每一位的要求,所以考慮按照從每一位來構造。因為9是一位數字的最大值,所以如果從某一位向後全是9,在他之前的...