演算法題 單調遞增的數字

2022-06-29 05:06:13 字數 799 閱讀 9752

給定乙個非負整數 n,找出小於或等於 n 的最大的整數,同時這個整數需要滿足其各個位數上的數字是單調遞增。

(當且僅當每個相鄰位數上的數字 x 和 y 滿足 x <= y 時,我們稱這個整數是單調遞增的。)

示例 1:

輸入: n = 10

輸出: 9

示例 2:

輸入: n = 1234

輸出: 1234

示例 3:

輸入: n = 332

輸出: 299

說明: n 是在 [0, 10^9] 範圍內的乙個整數。

要想結果最大,應該盡量與n的高位對齊,從第乙個無法對齊的開始,所有位都置為9。

具體操作:從高位開始依次遍歷n的每一位,若第i位小於i-1位,則第i-1位減一,由於有可能之前i-2等於i-1,則還需從i-1往前走,每次減一之後與前一位比較,直到前一位仍然小於等於當前位。從當前位開始,所有低位置為9.

c++

class solution 

reverse(m.begin(), m.end());

for (int i = 1;i < m.size();i++)

j++;

for (;j < m.size();j++)

break;}}

int res = 0;

for (int i = 0;i < m.size();i++)

return res;

}};

複雜度

時間複雜度:o(n),n為n的位數

空間複雜度:o(n)

單調遞增的數字

給定乙個非負整數n,找出小於或等於n的最大的整數,同時這個整數需要滿足其各個位數上的數字是單調遞增。當且僅當每個相鄰位數上的數字x和y滿足x y時,我們稱這個整數是單調遞增的。輸入 n 10 輸出 9輸入 n 1234 輸出 1234輸入 n 332 輸出 299 param n return va...

單調遞增的數字

給定乙個非負整數 n,找出小於或等於 n 的最大的整數,同時這個整數需要滿足其各個位數上的數字是單調遞增。當且僅當每個相鄰位數上的數字 x 和 y 滿足 x y 時,我們稱這個整數是單調遞增的。輸入 n 332,輸出 299 貪心思路 要使目標數字和 n 最接近,則需要盡可能保持高位數字不動 若某高...

738 單調遞增的數字

738.單調遞增的數字 給定乙個非負整數n,找出小於或等於n的最大的整數,同時這個整數需要滿足其各個位數上的數字是單調遞增。示例 1 輸入 n 10 輸出 9 示例 2 輸入 n 1234 輸出 1234 示例 3 輸入 n 332 輸出 299 說明 n 是在 0,10 9 範圍內的乙個整數。基本...