标签:digits 力扣 digit int --- result 数组 carry 打卡
加一
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 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;
}
}
标签:digits,力扣,digit,int,---,result,数组,carry,打卡 来源: https://blog.csdn.net/zhuyalan12/article/details/113527696
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。