單調遞增的數
給定一個非負整數 N,找出小於或等於 N 的最大的整數,同時這個整數需要滿足其各個位數上的數字是單調遞增。
(當且僅當每個相鄰位數上的數字 x 和 y 滿足 x <= y 時,我們稱這個整數是單調遞增的。)
示例 1:
輸入: N = 10
輸出: 9
示例 2:
輸入: N = 1234
輸出: 1234
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/monotone-increasing-digits
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
- 暴力遍歷 - 超時
class Solution {
public int monotoneIncreasingDigits(int N) {
int curr = N + 1;
while (--curr >= 0) {
if(isZeng(curr)) {
return curr;
}
}
return 0;
}
private boolean isZeng(int n) {
while (true) {
if (n < 10) {
return true;
}
int a = n % 10;
int b = (n / 10) % 10;
if (a < b) {
return false;
}
n = n / 10;
}
}
}
- 仔細想想 結果是可以由當前的數直接推出來的
因為要最大 所以優先從數的右邊開始計算(這樣減去的數值是最小的)
如果當前位數需要減1 則把其右邊的數值都置9
class Solution {
public int monotoneIncreasingDigits(int N) {
if (N < 10) {
return N;
}
List<Integer> ints = new ArrayList<>();
int num = N;
while (num > 0) {
ints.add(num % 10);
num /= 10;
}
Collections.reverse(ints);
for (int i = ints.size() - 1; i >= 0; i--) {
boolean adjust = false;
for (int j = i + 1; j < ints.size(); j++) {
if (adjust) {
ints.set(j, 9);
}
if (ints.get(j) < ints.get(i)) {
ints.set(i, ints.get(i) - 1);
ints.set(j, 9);
adjust = true;
}
}
}
Collections.reverse(ints);
int result = 0;
int radix = 1;
for (int i = 0; i < ints.size(); i++) {
result += ints.get(i) * radix;
radix *= 10;
}
return result;
}
}
相關文章
- 【LeetCode】738. 單調遞增的數字LeetCode
- 力扣-738. 單調遞增的數字力扣
- 程式碼隨想錄演算法訓練營 | 56. 合併區間,738.單調遞增的數字演算法
- CSS 計數器的妙用:數字遞增動效CSS
- 遞增的整數序列連結串列的插入
- excel下拉數字不遞增只複製 excel表格下拉數字不遞增怎麼操作Excel
- 程式碼隨想錄演算法訓練營day31| 56. 合併區間 738.單調遞增的數字演算法
- sql 流水號的遞增SQL
- 程式碼隨想錄演算法訓練營第三十七天 | 56.合併區間 738.單調遞增的數字演算法
- 程式碼隨想錄演算法訓練營day37 | leetcode 738. 單調遞增的數字、968. 監控二叉樹演算法LeetCode二叉樹
- php遞增和遞減運算子的介紹PHP
- 同步遞增(遞減)的齊次3項恆等式恆等式
- Leetcode 最小調整數+滑動視窗遞增子序列LeetCode
- Leetcode321. 拼接最大數——單調棧的使用LeetCode
- [JSOI2008] 最大數 (單調棧)JS
- Laravel 登入失敗次數限制 等待時間遞增Laravel
- HBU DS 1-3 遞增的整數序列連結串列的插入 (20分)
- 數字右邊第一個大於它的數(單調棧)
- python如何建立遞增的生成器Python
- [leetcode 中等 動態規劃]673. 最長遞增子序列的個數 [leetcode 簡單 滑動視窗] 674. 最長連續遞增序列 [筆試]陣列的遞增子陣列序列LeetCode動態規劃筆試陣列
- 【LeetCode刷題】896. 單調數列LeetCode
- 程式碼隨想錄演算法訓練營第第37天 | 56. 合併區間 、738.單調遞增的數字、968.監控二叉樹演算法二叉樹
- 行從左到右遞增,列從上到下遞增,找目標值
- 單調棧/單調佇列佇列
- 單條記錄大小增長倍數和ibd檔案大小的增長倍數不成正比
- iOS-Swift中的遞增(++)和遞減(--)被取消的原因-官方答覆iOSSwift
- JS的方法引數傳遞(按值傳遞)JS
- # 2024_8_4 求單調上升總和為n的數列的方案數
- tkinter中spinbox遞增和遞減控制元件(十)控制元件
- 遞增排序個人見解排序
- 單調棧 和 單調佇列佇列
- 單調棧和單調佇列佇列
- 【每日一題】3250. 單調陣列對的數目 I每日一題陣列
- 簡單的加減乘除(遞迴)遞迴
- JavaScript之遞迴的簡單使用JavaScript遞迴
- 引數的定義和引數的傳遞
- 【遞迴】小q的數列遞迴
- 請求引數的傳遞