【leetcode-66】 加一

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。

示例 2:

输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。


我的错误解法:
不能转为数字然后操作,算法正确但是会越界然后得不到正确结果
    public static int[] plusOne(int[] digits) {

        int num = 0;
        for (int i=0;i<digits.length;i++) {
            num = num*10 + digits[i];
        }
        num = num + 1;
        //新数长度
        int length = 0;
        int k = num;
        while(k !=0) {
            k /= 10;
            length++;
        }
        int[] res = new int[length];
        for (int i=length-1;i>=0;i--) {
            res[i] = num%10;
            num = num/10;
        }
        return res;
    }

 

参考解法:

链接:https://www.nowcoder.com/questionTerminal/4d135ddb2e8649ddb59ee7ac079aa882
来源:牛客网

//1.不需要flag! 从右向左,遇到9就变0,非9就加1,然后break;
//2.digits[0]如果等于0,说明长度增加了1,则新建数组,首位为1,其他位为0;   
 public int[] plusOne(int[] digits) {
        for (int i = digits.length-1; i >= 0 ; i--) {
            if (digits[i] == 9)digits[i] = 0;
            else {
                digits[i] = digits[i]+1;
                break;
            }
        }
        if (digits[0] == 0){
            int[] arr = new int[digits.length+1];
            arr[0] = 1;
            for (int i = 1; i < arr.length; i++) arr[i] = 0;
            return arr;
        }
        return digits;
    }

 

posted @ 2019-04-03 18:37  twoheads  阅读(202)  评论(0编辑  收藏  举报