leetcode-66-easy

Plus One
思路一: 暴力,方向想错了,不能把 digits 当做一个整数看

public int[] plusOne(int[] digits) {
    if (digits[digits.length - 1] != 9) {
        digits[digits.length - 1]++;
        return digits;
    }

    int[] result = new int[digits.length + 1];

    int i = digits.length - 1;
    while (i >= 0 && digits[i] == 9) {
        result[i+1] = 0;
        i--;
    }

    if (i >= 0) {
        result[i+1] = digits[i] + 1;
        i--;

        while (i >= 0) {
            result[i + 1] = digits[i];
            i--;
        }

    } else {
        result[0] = 1;
    }

    if (result[0] == 0) {
        int[] result2 = new int[digits.length];
        System.arraycopy(result, 1, result2, 0, result2.length);
        return result2;
    }

    return result;
}

思路二: 模拟加法进位操作,在原数组上进行运算。
需要计算的数组完全分类,就两种情况

  • 全部是 9 ,直接返回 1 开头,其余位置为 0 的新数组
  • 有位置不是 9,对每个位置做进行判断,遇到无法进位时,直接 +1 返回结果
public int[] plusOne(int[] digits) {
    for (int i = digits.length - 1; i >= 0; i--) {
        if (digits[i] == 9) {
            digits[i] = 0;
        } else {
            digits[i] += 1;
            return digits;
        }
    }

    digits = new int[digits.length + 1];
    digits[0] = 1;

    return digits;
}
posted @ 2022-10-11 17:59  iyiluo  阅读(21)  评论(0)    收藏  举报