锵锵锵~ 我来更LeetCode文啦!今日一道简单题
66.加一
题目内容
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
解题思路
刚开始看这道题时,脑子里第一反应就是直接末尾加一就行啦啊,结果啪啪打脸,错了.......
后来琢磨琢磨着才想出第二种情况、第三种情况...这说明什么,这说明好事要多磨,多思多想才行!
所以最后总结出以下内容:
所有数组的形式莫非如下三种情况:
所有位置都为9,即999... 最后一位不为9,即...y(y:0-8) 中间某一位不为9,即...y9..(y:0-8) 具体解题思路如下:
遍历数组,从后向前,找到第一个不等于9的位置(用参数k进行记录)
- 如果遍历完数组,说明所有位置都为9,即999...,那么其值必定为1000...我们将数组长度加一,第一位为1,其他位置均为0 判断最后一位是否为9
- 如果最后一位不为9,即...y(y:0-8),将最后一位加一即可 否则就是中间某一位置不为9,后面均为9
- 如果数组中间某一位不为9,即...y9..(y:0-8),那么将后面为9的位置均置0,然后第k位加一即可
解题答案
class Solution {
public int[] plusOne(int[] digits) {
int k = 0;//记录第一个不等于9的位置(从后往前)
//如果全为9
for(int i = digits.length-1 ; i >= 0 ;i --){
if(digits[i] != 9){
k = i;//记录下不等于9的位置
break;
}
if(i == 0){
int[] res = new int[digits.length+1];
for(int j = 0;j <= digits.length;j++){
res[j] = 0;
}
res[0] += 1;
return res;
}
}
//如果最后一位不为9
if(digits[digits.length-1] != 9){
int[] res = new int[digits.length];
for(int i = 0;i < digits.length;i++){
res[i] = digits[i];
}
res[digits.length-1] += 1;
return res;
}
//如果数组中间某一位不为9
else{
for(int i = k+1;i < digits.length;i++){
digits[i] = 0;
}
int[] res = new int[digits.length];
for(int j = 0;j<digits.length;j++){
res[j] = digits[j];
}
res[k] += 1;
return res;
}
}
}
最后
文章有写的不好的地方,还请大佬们不吝赐教!!
LeetCode刷题链接放下面啦!
明天也要继续加油鸭!