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#返回结果数组

 

posted on 2017-04-21 16:58  Sempron2800+  阅读(117)  评论(0编辑  收藏  举报