public class Solution { public int[] PlusOne(int[] digits) { var last = digits[digits.Length - 1]; if (last + 1 < 10) { digits[digits.Length - 1]++; return digits; } else { var list = new List<int>(); int step = 1; for (int i = digits.Length - 1; i >= 0; i--) { var cur = digits[i]; cur = cur + step; if (cur >= 10) { step = 1; } else { step = 0; } list.Add(cur % 10);//原来肯定是9,9+1变为10 } if (step == 1) { list.Add(1); } list.Reverse(); return list.ToArray(); } } }
https://leetcode.com/problems/plus-one/#/description
补充一个python的实现:
1 class Solution: 2 def plusOne(self, digits: 'List[int]') -> 'List[int]': 3 n = len(digits)#获取原来数组的长度 4 temp = [0] * n#生成一个与原数组相同长度的全0数组 5 up = 0#是否进位 6 last = digits[-1]#最低位的数字 7 last += 1#将最低位的数字+1 8 if last == 10:#判断+1后是否是10 9 temp[-1] = 0#如果是0,则最低位更新为0 10 up = 1#表示有一个进位 11 else: 12 temp[-1] = last#没有进位 13 14 for i in range(n-2,-1,-1): 15 cur = digits[i]#从倒数第二位开始,向左(高位)循环 16 cur += up#增加进位(up的值可以取0表示没有进位,可以取1表示有进位) 17 if cur == 10:#进一步判断是否会产生新的进位 18 temp[i] = 0 19 up = 1 20 else: 21 temp[i] = cur 22 up = 0 23 if up == 1:#当循环结束的时候,已经计算到了最高位(index=0的位置),如果还存在进位 24 temp.insert(0,1)#则在结果数组的左端(index=0的位置),插入一个1 25 return temp#返回结果数组