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