java小小白,学了很多的基础啊。但是感觉自已思维很差,就想着以后每天一道算法题,看看能不能补救一下吧。3分钟热度的我,来试一试能不能成功坚持吧。
今日2020-12-16 题目如下
给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。
(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)
看到一个这个题目,首先想到,是数字单调递增,既然是小于等于的话,那么就是从N开始一个一个递减,然后找到合适的就停止。我一开始就是这么想的,我愿意称之为傻瓜递减法。这个主要难的方面就是,你要想到一个算法。来把数字给带入进去,如果对的话返回true,不对的话返回false.我个人感觉就是脑子里边想的始终想不全,所以遇到事情问题最好还是要写到纸上。
接下来的就是考虑这个算法怎么写
然后就是把算法带入递减的算法,进行测试。然后测试基本没有问题,我就提交了。
最后的结果居然是运行结果超时。咯咯咯 笑抽抽
我就在想,有什么办法,可以提高运行速度,因为问题就是如果数字太大的问题,万一合适的数字又很小,那么就导致运行次数太多,然后时间就超了啊。
官方的一套官方解释
哈哈 我感觉大部分人都看不懂。我也是看了好几遍才看懂。大概意思是把数字转化我字符数组,尽量让低位置位9.然后再去看高位,在保证递增的情况下,让高位-1 。
果然 还是需要努力啊