leetcode 738 單調遞增的數字

2022-05-05 10:03:10 字數 1580 閱讀 9522

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

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

示例 1:

輸入: n = 10

輸出: 9

示例 2:

輸入: n = 1234

輸出: 1234

示例 3:

輸入: n = 332

輸出: 299

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

題目要求:找到不大於n的數, 這個數要求從高位到地位是遞增的

思路:從高位找到第一位不滿足要求的數,將其位置記為i,把i位的數字減小1, 且i位之後的數字要均為9,才能保證數字最大。  此外還要保證修改i位的數字後,要保證i之前的數字均保證滿足遞增的要求;就有一下幾種情況

i是最高位,將其減一即可

i不是最高位,且a[i]-a[i+1]>=1,  直接把a[i]-1, 這種情況下依然滿足遞增的條件

i不是最高位,且a[i]-a[i+1]<1, 此時a[i]-1

1

class

solution

9return

ans;10}

11int monotoneincreasingdigits(int

n) 20}21

if(flag) return

n;//n本身就是遞增的,直接返回

22if(i==ans.size()-1) ans[i]--;//情況1

23else

29 ans[m]--;//情況230}

31for(int k=i-1; k>=0; k--) ans[k]=9

;//i位之後的數字全部置為9,保證數字最大

32int temp=0;33

for(i = ans.size()-1; i>=0; i--)

34 temp = temp*10 +ans[i];

35return

temp;36}

3738 };

一些小改進

把上面的情況3在乙個迴圈中解決,小小的精簡了一下**

1

class

solution

9return

ans;10}

11int monotoneincreasingdigits(int

n) 19}20

for(int k=begin; k>=0; k--) ans[k]=9;21

for(int i = ans.size()-1; i>=0; i--)

22 temp = temp*10 +ans[i];

23return

temp;

24}

25 };

這種問題,把n轉換成字串是最為簡便的,不用去單獨獲取n的每一位數。

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輸出...

LeetCode 738 單調遞增的數字

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