力扣738-单调递增的数字(java题解)
生活随笔
收集整理的這篇文章主要介紹了
力扣738-单调递增的数字(java题解)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
力扣738-單調遞增的數字
一、原題題目(中等)
1.1 題目
? 給定一個非負整數 N,找出小于或等于N的最大的整數,同時這個整數需要滿足其各個位數上的數字是單調遞增。
? (當且僅當每個相鄰位數上的數字 x 和 y 滿足 x <= y 時,我們稱這個整數是單調遞增的。)
1.2 示例
- 示例1:
輸入: N = 10
輸出: 9 - 示例2:
輸入: N = 1234
輸出: 1234 - 示例3:
輸入: N = 332
輸出: 299 - 說明: N 是在[0, 109]范圍內的一個整數。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/monotone-increasing-digits
二、解題思路一
2.1 題目意思理解
? 按照題目意思,我們從前往后去分析數據,如果當前位數上的值小于后一位的值時,那么當前位值要 -1,右邊的所有位置 9 。否則按照位數向右遞歸。
2.2 詳細代碼(Java)
public class Solution {public int monotoneIncreasingDigits(int N) {// 將 int 轉換成字符串再轉換成字符數組 char[] strN = Integer.toString(N).toCharArray(); int i = 1;// 找到前一個數值大于當前數值的位置while (i<strN.length && strN[i-1]<=strN[i]) i++;// 原數字不是單調遞增的if (i<strN.length){// 前一個數值大了,執行減一操作,減一后要檢驗之前的while (i > 0 && strN[i-1]>strN[i]){strN[i-1]--;i--;}// 講最終修改后的位置之后都改為 9for (i+=1;i<strN.length;i++) strN[i]='9'; }return Integer.parseInt(new String(strN));} }2.3 算法執行結果
三、總結分析
? 從前往后遍歷,如果前面的值大于后面的值就把當前位數減一然后把后面的值變成9,以此類推
總結
以上是生活随笔為你收集整理的力扣738-单调递增的数字(java题解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新西兰发明新型传感器,电子产品不再需要充
- 下一篇: 《转》【笔记1】关于联想g470更换in