题目

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

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

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

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

该题目使用数组来模拟常规整数的加法,即数组最后一位是个位,倒数第二位是十位,倒数第三位是百位以此类推。

解决思路:
  1. 先要通过算法来得到一个个位被加一的数组命名为plus,例如[9,9,9]通过算法处理后得到[10,0,0]
  2. 实际返回数组命名为ret其长度length等于plus的长度,若plus[0]等于10则length++
  3. 把plus复制到返回结果ret中,若plus[0]=10则从第三位开始赋值,并使ret[0]=1,ret[1]=0
处理个位加1的算法

这里我使用递归来处理:从最后一位开始加1,若结果=10则使当前索引对应的值=0,递归处理并使索引-1,直到加1的结果<10或索引到达0

public int[] Plus(int[] digits,int index,int plusValue){
    int value = digits[index] + plusValue;
    if(value == 10 && index > 0){
        digits[index] = 0;
        return Plus(digits,index - 1,1);
    }
    digits[index] = value;
    return digits;
}
整体代码
public class Solution {
    public int[] PlusOne(int[] digits) {
       int[] plus = Plus(digits, digits.Length - 1, 1);
            int length = plus.Length;
            int index = 0;
            if (plus[0] == 10)
            {
                length++;
                index = 2;
            }
            int[] ret = new int[length];
            if (plus[0] == 10)
            {
                ret[0] = 1;
                ret[1] = 0;
            }

            for (int i = index; i < plus.Length; i++)
            {
                ret[i] = plus[i];
            }

            return ret;
    }
    
    public int[] Plus(int[] digits,int index,int mulity){
        int value = digits[index] + mulity;
        if(value == 10 && index >0){
            digits[index] = 0;
            return Plus(digits,index - 1,1);
        }
        digits[index] = value;
        return digits;
    }
}

性感算法渣渣,在线刷题,要加油撒。。。


肥灵天下第一
3 声望0 粉丝

« 上一篇
Unity GC优化

引用和评论

0 条评论