网站开发前台和后台,北京快速网站建设,专业全网优化,哈尔滨市建设工程信息网官方网站每日一题在昨天断开了一天#xff0c;是因为作者沉迷吉他#xff0c;无法自拔……竟然把每日一题给忘了#xff0c;所以今天#xff0c;发两篇每日一题#xff0c;把昨天的给补上
一、题目 二、解题思路
1、我的思路
其实乍一看这道题还是比较简单的#xff0c;就是让…每日一题在昨天断开了一天是因为作者沉迷吉他无法自拔……竟然把每日一题给忘了所以今天发两篇每日一题把昨天的给补上
一、题目 二、解题思路
1、我的思路
其实乍一看这道题还是比较简单的就是让数组的最后一个元素加1
但是再仔细想想就不难考虑到一种更加麻烦的情况——进位
如果一个数以9结尾那么就需要将最后一位置为0倒数第二位加1但是如果倒数第二位也是9呢就需要重复上述操作将倒数第二位置为0倒数第三位加1但是如果倒数第三位也是9呢如果这个数是1999999999怎么办我只想说禁止套娃
想到这里我的脑海里浮现了一个思路
将可能的情况分为3种
1、数组中只有0直接返回1
2、数组最后一位不是9直接让最后一位加1再返回原数组
3、数组最后一位是9从后往前遍历数组将值为9的元素全置为0找到最靠后的一个不为9的元素时让这个元素加1结束循环返回原数组
于是我写了如下代码
if(digits[0] 0){return new int[] {1};}else if(digits[digits.length - 1] ! 9){digits[digits.length - 1];return digits;}else{for (int i digits.length-1; i 0 ; i--) {if(digits[i] ! 9){digits[i];break;}else{digits[i] 0;}}return digits;}
但这段代码却没有通过所有的测试用例原因是我遗漏了一种情况如果数字是999这就意味着遍历数组将找不到值不为9的元素按照我的代码走一遍最后返回的结果是000而预期结果是1000也就是说我们还要加入一段代码在找不到值不为9的元素时数组长度加1用于存放多余的1
于是我改进了代码
if(digits[0] 0){return new int[] {1};}else if(digits[digits.length - 1] ! 9){digits[digits.length - 1];return digits;}else{int i;for (i digits.length-1; i 0 ; i--) {if(digits[i] ! 9){digits[i];break;}else{digits[i] 0;}}if(i -1){int[] arr new int[digits.length1];arr[0] 1;return arr;}return digits;}
这里有一个小知识点
由于我们使用的是数组的动态初始化也就是初始化时只指定数组长度由系统自动分配初始值而整数类型的默认初始值是0所以我们只需要把第一位置为1在直接返回该数组即可 2、官方题解
官方题解和我的思路是一样的只是代码略有不同
int n digits.length;for (int i n - 1; i 0; --i) {if (digits[i] ! 9) {digits[i];for (int j i 1; j n; j) {digits[j] 0;}return digits;}}// digits 中所有的元素均为 9int[] ans new int[n 1];ans[0] 1;return ans;3、经验分享
其实在写这篇博客之前我的脑海里是没有完整的思路的但是当我在博客里分析完题目之后很快就有思路了所以大家遇到题目先不要着急给自己定义好难、我想不出来等等这些标签先冷静地分析题目慢慢地想可能一开始会思维不严谨、可能会遗漏情况但是发现问题之后再改进代码也来得及总比你不动手敲要好吧~