日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 738. 单调递增的数字(贪心)

發布時間:2024/7/5 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 738. 单调递增的数字(贪心) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 題目

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

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

示例 1: 輸入: N = 10 輸出: 9示例 2: 輸入: N = 1234 輸出: 1234示例 3: 輸入: N = 332 輸出: 299 說明: N 是在 [0, 10^9] 范圍內的一個整數。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/monotone-increasing-digits
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 解題

  • 從高位往后找,找到第一個下降的地方,比如332, 3-2下降
  • 在該位置往前找,找到連續的最前面一樣的數字(第一個3),將其 -1,后面的全部變成 9,(299)
class Solution { public:int monotoneIncreasingDigits(int N) {if(N < 10)return N;string num;while(N)//數字轉字符串{num = to_string(N%10) + num;N /= 10;}int i, k, ans = 0;for(i= 0; i < num.size()-1; ++i){if(num[i] > num[i+1])//第一個下降的地方{k = i-1;while(k >= 0 && num[k] == num[i])//前面有跟它一樣的 332k--;num[++k]--;//最前面的一位 -1for(++k; k < num.size(); ++k)//后面所有的位變成 9num[k] = '9';break;}} for(i=0; i < num.size(); ++i)//字符串轉數字ans = ans*10+ num[i]-'0';return ans;} };

總結

以上是生活随笔為你收集整理的LeetCode 738. 单调递增的数字(贪心)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。