738 單調遞增的數字

2021-10-12 03:19:14 字數 1222 閱讀 1843

738. 單調遞增的數字

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

示例 1:

輸入: n = 10

輸出: 9

示例 2:

輸入: n = 1234

輸出: 1234

示例 3:

輸入: n = 332

輸出: 299

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

基本思路:從左往右遍歷n的某一位,當出現逆序時,等於較高位的數全部減去1,後面的全部設定位1       貪心演算法

bool isasd(int num)

int len=num.size();

int pre=-1;

int lastasd=0;

int lastasdpos=-1;

for(int i=len-1;i>=0;i--)

else if(num[i]=0;j--)

break;

}pre=num[i];

}int ans=0;

for(int i=len-1;i>=0;i--)

return ans;

}

轉化成string

int monotoneincreasingdigits(int n) 

if(i0&&str[i-1]>str[i])

for(i=i+1;i0;i--)

}for(int i=flag;i基本思路:由於各個位置上單調遞增,對於n=a1a2a3a4a5a6a7a8a9,必然滿足0<=a1<=...<=a9<=9),t[i]表示有i個連續1組成的數  參考1111……累加法

那麼必然可以寫成這樣的形式:

n=a1*t[9]+(a2-a1)*t[8]+...(a9-a8)*t[1];

int monotoneincreasingdigits(int n)

result+=ones;

}return result;

}

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