leetcode66- Plus One- easy

Given a non-negative integer represented as a non-empty array of digits, plus one to the integer.

You may assume the integer do not contain any leading zero, except the number 0 itself.

The digits are stored such that the most significant digit is at the head of the list.

1.善用/ %,用c记录,踏踏实实做就好。问一下能不能直接改原数组,不能的话就再开个list辅助也行。

2.观察规律,最后大一格的话只可能发生在输入全是9的情况,而且加后的结果就是新位1后面全是0。所以你可以直接先假设不是极端情况一直加上去,如果遇到不是9的时候就可以直接把改后的原数组返回了。如果最后还是没有返回的话就说明遇到极端情况,直接开一个新的长一点的第一个位改1即可。

1.基础版模拟法实现

class Solution {
    public int[] plusOne(int[] digits) {
        List<Integer> list = new ArrayList<>();
        int[] result;
        int idx = digits.length - 1;
        int c = 1;
        while (idx >= 0) {
            int digit = digits[idx] + c;
            list.add(digit % 10);
            c = digit / 10;
            idx--;
        }
        
        result = new int[digits.length + c];
        int start = c;
        result[0] = c;
        for (int i = start; i < result.length; i++) {
            result[i] = list.get(list.size() - (i - start) - 1);
        }
        
        return result;
    }
}

2.观察规律实现

public int[] plusOne(int[] digits) {
        
    int n = digits.length;
    for(int i=n-1; i>=0; i--) {
        if(digits[i] < 9) {
            digits[i]++;
            return digits;
        }
        
        digits[i] = 0;
    }
    
    int[] newNumber = new int [n+1];
    newNumber[0] = 1;
    
    return newNumber;
}
原文地址:https://www.cnblogs.com/jasminemzy/p/7965843.html