加一
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2cv1c/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
思路:
Python
- 把数组合成字符串,用int方法取得字符串的值并加一,最后再拆开,用map把 字符列表 转化为 整型列表 就行了。
- 一开始想这不一句话解决吗?
- 但是遇到输入[0, 0]的时候出错了,所以说还是要判断一下值是否为0的。
JAVA
- 加法是从后向前的,所以说遍历digits也应该从后向前。
- 应该有一个参数记录是否发生进位(carry)
- 初始化返回数组(result)应该比digits数组多1位, 所以digits中的第i位,放在result中的话,应该是i+1
- result的长度有两种情况,要么等于digits的长度,要么是digits数数组长度加1。
PS:第一次用时这么短,留个纪念hhh
代码
Python
def plusOne(digits):
value = int("".join(map(str,digits)))
if value == 0:
return digits[:len(digits)-1:]+[1]
else:
return list(map(int, list(str(value+1))))
JAVA
public static int[] plusOne(int[] digits) {
int[] result = new int[digits.length+1];
int carry = 1, bit = 0; //carry记录有没有进位, bit 记录当前位的值
for(int i = digits.length-1; i >= 0; i--){ // 倒序遍历
result[i+1] = (digits[i]+carry)%10; // 从后往前排列,又因为result比digit多1位,使用是i+1
carry = (digits[i]+carry)>9?1:0;
}
// 循环结束后如果carrry为1,说明最高位进位了,还需要再加一位
if (1 == carry){
result[0] = carry;
return result;
}
else{
//因为没有进位,所以结果的实际长度和digit的一样,而且digit不会再用到了,且不是引用进来的,所以说不会改变原digit
System.arraycopy(result, 1, digits, 0, digits.length);
return digits;
}
}