leetcode——66.加一

经过一早上的两个多小时才完成,,,

代码如下:

 1 class Solution:
 2     def plusOne(self, digits):
 3         index=[]
 4         for i in range(len(digits)):
 5             if digits[i]==9:
 6                 index.append(i)
 7         
 8         if len(index)==len(digits):
 9             digits[:]=(0,)*(len(digits)+1)
10             digits[0]=1
11         else:
12             a=[i for i in range(len(digits))]
13             ret=[]
14             for i in a:  #差集
15                 if i not in index:
16                     ret.append(i)
17             
18             b=ret[-1]
19             digits[b]+=1
20             digits[b+1:]=(0,)*(len(digits)-b-1)
21         return digits
22         
23         
24 a=Solution()    
25 digits=[1,2,3]
26 print(a.plusOne(digits))

具体思路就是:

现将digits中9的索引找出来保存在列表index中;

a是digits所有元素索引构成的列表;

求index和a的差集ret;

求ret中最大的数,就是digits中从右到左第一个不是9的项数的索引,将它自身加一,它后面的项都设置为0;

如果index的长度和digits的长度相等,说明digits中的数字都是9,将第一个数设置为1,末尾添加一个0,,,,,,

 

就这样。

digits[:]=(0,)*(len(digits)+1)

将digits设置为长度是len(digits)+1的全0列表。

我不知道为什么非得这样乘,不然它就只显示一个0,,这个写法是试出来的。

第一次用到了(0,)这样的用法,还是挺开心的。

 

之前还实现了一次,但是显示超出时间了,就算了,不在这里放了。

 

@@@@@@@@@@@                                                 ——2019.9.18

 

 


 

 

完成

public int[] plusOne(int[] digits) {
        int len = digits.length;
        if(len == 0){
            return new int[]{1};
        }
        if(digits[len - 1] < 9){
            digits[len - 1] ++;
            return digits;
        }
        //设置进位
        int c = 0;
        //设置数组存储结果
        ArrayList<Integer> list = new ArrayList<>();
        //从后往前遍历
        int i = len -2;
        list.add(0);
        c = 1;
        while(i>=0){
            //满10进1,否则,将其他数字全部挪一遍
            list.add(0,(c+digits[i])%10);
            c = (c+digits[i])/10;
            i++;
        }
        if(c == 1) {
            list.add(0, 1);
        }
        return list.stream().mapToInt(Integer::valueOf).toArray();
    }

 

 

但是效率好差。

看看别人简洁明了的答案:

public int[] plusOne(int[] digits) {
        for (int i = digits.length - 1; i >= 0; i--) {
            digits[i]++;
            digits[i] = digits[i] % 10;
            if (digits[i] != 0) return digits;
        }
        digits = new int[digits.length + 1];
        digits[0] = 1;
        return digits;
    }

 

 

——2020.7.10

 

posted @ 2019-09-18 15:07  欣姐姐  阅读(263)  评论(0编辑  收藏  举报