PlusOne

    /*给定一个非负数,用一个数组表示各个位上的数,返回这个数加1后组成的新数组
     *eg.
     * 给定 [1,2,3] 表示 123, 返回 [1,2,4].
     * 给定 [9,9,9] 表示 999, 返回 [1,0,0,0].

     */

分析:主要考虑进1的情况,如果最高位加1 后需要进1,则新数组就会比原数组多一个数

解法一:利用栈先进后出特性存储每一位数

    private int[] PlusOne(int[] nums)
    {
        Stack<int> stack = new Stack<int>();
        int flag = 1;                                     //表示要进位的数,初始值为1,表示初始时候+1
        for (int i = nums.Length - 1; i >= 0; i--)
        {
            nums[i] += flag;
            int temp = nums[i] % 10;
            flag = nums[i] / 10;
            stack.Push(temp);
            if (i == 0 && flag > 0)
            {
                stack.Push(flag); 
            }
        }
        int[] res = new int[stack.Count];

        for (int i = 0; i < res.Length; i++)
        {
            res[i] = stack.Pop();
        }
        return res;
    }

解法二:

    private int[] PlusOne2(int[] nums)
    {
        int flag = 1;
        for (int i = nums.Length - 1; i >= 0 && flag > 0; i--)                 //当flag==0时 就不需要进位,数组前面的数字就不会发生改变
        {                                                                      // 就跳出循环
            int temp = nums[i] + flag;
            nums[i] = temp % 10;
            flag = temp / 10;
        }
        if (flag == 0)                                                         //flag==0  直接返回原数组
            return nums;
        int[] res = new int[nums.Length + 1];
        res[0] = 1;
        for (int i = 0; i < nums.Length; i++)
        {
            res[i + 1] = nums[i];
        }
        return res;                                                           //flag==1  返回值比原数组多一个数 res[0]=1;
    }

猜你喜欢

转载自blog.csdn.net/wenbooboo/article/details/81033416