LeetCode 738 單調遞增的數字

2021-10-12 03:10:50 字數 1607 閱讀 2288

給定乙個非負整數 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!!!

所以當題目輸入字串長度大於等於10位時,一定要注意!

乙個可行的解決方法是使用stoll函式代替stoi,將string轉化為long long int。

to_string和stoi的標頭檔案是#include

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,在他之前的...