monotoneIncreasingDigits-LeetCode738

2024-03-14 08:58

本文主要是介绍monotoneIncreasingDigits-LeetCode738,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目要求

给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。

(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)

示例 1:

输入: N = 10
输出: 9

示例 2:

输入: N = 1234
输出: 1234

示例 3:

输入: N = 332
输出: 299

说明: N 是在 [0, 10^9] 范围内的一个整数。
Related Topics 贪心算法

解题思路(欠着,后补)

代码

public int monotoneIncreasingDigits(int N) {//解题思路判断这个数值是否是按照递增的顺序排列的String RN=N+"";if(RN.length()==1)return N;StringBuilder sb=new StringBuilder();if(RN.charAt(0)=='1'&&RN.charAt(1)=='0'){for (int i = 1; i < RN.length(); i++) {sb.append(9);}return Integer.parseInt(sb.toString());}int k=RN.length()+1;for (int i = 1; i < RN.length(); i++) {if(RN.charAt(i)-'0'>=RN.charAt(i-1)-'0'){sb.append(RN.charAt(i-1)-'0');if(i== RN.length()-1)sb.append(RN.charAt(i)-'0');continue;}if(sb.length()>0&&RN.charAt(i-1)==RN.charAt(i-2)){int index = sb.indexOf(String.valueOf(RN.charAt(i - 1) - '0'));sb.replace(index,index, String.valueOf(RN.charAt(index)-'0'-1));sb.delete(index+1,sb.length());k=index+1;}else{sb.append(RN.charAt(i-1)-'0'-1);k=i;}break;}for (int i = k; i < RN.length(); i++) {sb.append(9);}return Integer.parseInt(sb.toString());}

效果(后续参考大神解法,插眼等后续):

info
解答成功:
执行耗时:8 ms,击败了11.20% 的Java用户
内存消耗:35.6 MB,击败了40.36% 的Java用户

这篇关于monotoneIncreasingDigits-LeetCode738的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/807895

相关文章

leetcode738:单调递增的数字

单调递增的数字 当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。 给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。 public int monotoneIncreasingDigits(int n) {if(n<10){return n;}int len = String.valueOf(n).length();in

代码随想录算法训练营第三十二天|leetcode738题

一、leetcode第738题 本题要求返回小于等于给定数字且从最高位到最低位呈单调递增的数值,需要从最低位向最高位遍历,如果最低位比其前一位小则若要使改变后数值最大需要将前一位作减一操作并记录下当前位,在遍历结束后将记录的当前位之后的所有位数值都置为9,此时返回的数值即为所求。 具体代码如下: class Solution {public:int monotoneIncreasingDi

代码随想录算法训练营Day37 | LeetCode738.单调递增的数字、LeetCode968.监控二叉树、贪心算法总结

LeetCode738.单调递增的数字 思路:与分糖果的题目同理,因为需要与前一位数比较,并且修改这两个数,因此需要从后往前遍历,当前一位数比当前数大时,则前一个数-1,后一个数变为9。 代码细节:1、flag初始值不为0,因为当数本身就是递增序列时,不应该执行赋9操作。 2、flag=i,而不是直接赋值,因为如果当数字为1000时,并不会执行赋值操作,但是最终答案为999。 class S