PisecesPeng / PisecesPeng.record.me

:beach_umbrella: All things are difficult before they are easy
MIT License
3 stars 1 forks source link

加一 #37

Closed PisecesPeng closed 3 years ago

PisecesPeng commented 3 years ago

加一

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

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

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

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

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


题目地址: https://leetcode-cn.com/problems/plus-one/

PisecesPeng commented 3 years ago

解题思路

代码

public static int[] func(int[] nums) {
    int[] numsbackup = new int[nums.length + 1];  // 设置备用的结果数组
    numsbackup[0] = 1;  // 将其首位设置为1, 因为(9+1)进一位, 故首位一定是1
    for (int i = nums.length - 1, j = numsbackup.length - 1; i >= 0; i--, j--) {
        if (nums[i] < 9) {  // 数组数字小于9, 说明不会再向前进位
            nums[i] += 1;
            numsbackup[j] = nums[i];
            break;
        } else if (nums[i] == 9) {  // 数组数字等于9, 说明还会继续向前进位
            nums[i] = 0;
            numsbackup[j] = nums[i];
        }
    }
    if (nums[0] == 0) return numsbackup;  // 如果数组的第一位为0, 则说明其原值为9, 故输出备用结果
    else return nums;
}
PisecesPeng commented 3 years ago

LeetCode题解

解题思路

代码

public static int[] func(int[] nums) {
    int len = nums.length;
    for (int i = len - 1; i >= 0; i--) {
        nums[i]++;
        nums[i] %= 10;
        // +1后的值取余, 若是未进位, 则说明小于9, 直接返回结果
        if (nums[i] != 0) return nums;
    }
    // 若是每个数字都进位, 则直接new新数组, 且最高位设置1即可.
    nums = new int[len + 1];
    nums[0] = 1;
    return nums;
}