题目
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
1 2 3
| 输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123。
|
示例 2:
1 2 3
| 输入: [4,3,2,1] 输出: [4,3,2,2] 解释: 输入数组表示数字 4321。
|
思路
这道题考察的是数组加法,数组加法的常规步骤为:
- 定义一个记录进制信息的变量.
- 一个循环内按位相加得到每一位的和,和模10就是每一位的值,注意,如果是字符串数组,char要减去48才是int.
- 进位等于和除以10.
- 循环结束后如果进位仍然为1,则说明数组第一位仍然要添加1.
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public int[] PlusOne(int[] digits) { int flag = 1; int digitSum = 0; for (int i = digits.Length - 1; i >= 0; i--) { digitSum = digits[i] + flag; digits[i] = digitSum % 10; flag = (digitSum + 1 + flag) / 10; } if (flag == 0) { return digits; } else { int[] result = new int[digits.Length + 1]; result[0] = 1; digits.CopyTo(result, 1); return result; } }
|