20201215:738. 单调递增的数字

题目

给定一个非负整数 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

第一反应:
从个位到最高位依次相邻比较,不合条件,高位减1,低位全归9

例:4125
2<5
1<2
4>1 → 3999

例:78329
2<9
3>2 → 78299
8>2 → 77999

例:70987
8>7 → 70979
9>7 → 70899
0<8
7>0 → 69999

修改:
从高位向低位依次相邻比较,用tmp记录连续相同数第一次出现的位置
flag=true
a. arr[i]=arr[i+1] → if(flag) {tmp=i, flag = false}
b. arr[i]<arr[i+1] → tmp=i+1, flag = true
c. arr[i]>arr[i+1] → arr[tmp]-=1, arr[j]=9 (j>i)

例:77886
7=7 → tmp = 0, false
7<8 → tmp = 1, true
8=8 → tmp = 2, false
8>6 → 77799

例:2223443
2=2 → tmp = 0, false
2=2 → tmp = 0
2<3 → tmp = 3, true
3<4 → tmp = 4, true
4=4 → tmp = 4, false
4>3 → 2223399

例:4125
4>1 → 3999

例:78329
7<8 → tmp = 1
8>3 → 77999

例:70987
7>0 → 69999

代码落实

他人解法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 难度:★★★☆☆类型:数组方法:数学 力扣链接请移步本题传送门[https://leetcode-cn.com/p...
    玖月晴阅读 3,477评论 0 0
  • 本文是我自己在秋招复习时的读书笔记,整理的知识点,也是为了防止忘记,尊重劳动成果,转载注明出处哦!如果你也喜欢,那...
    波波波先森阅读 7,841评论 0 10
  • ● 如何打印二叉树每层的节点? 考察点:二叉树 参考回答: 实现代码: import java.util.Arra...
    le_u阅读 3,558评论 0 0
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 12,233评论 16 22
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    余生动听阅读 13,602评论 0 11

友情链接更多精彩内容