【LeetCode每日一题】——66.加一
文章目录
一【题目类别】
二【题目难度】
- 简单
三【题目编号】
- 66.加一
四【题目描述】
- 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
五【题目示例】
-
示例 1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。 -
示例 2:
输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。 -
示例 3:
输入:digits = [0]
输出:[1]
六【题目提示】
- 1 <= digits.length <= 100
- 0 <= digits[i] <= 9
七【解题思路】
- 从后向前遍历数组,遇到“9”就变成“0”,表示进位,继续向前遍历,如果遇到不是“9”,此位置数字加一,然后返回即可。最后如果还有进位,新建一个数组,首位是“1”,其余位都是“0”
八【时间频度】
- 时间复杂度:O ( n ) O(n) O(n),其中n n n为数组长度
- 空间复杂度:O ( 1 ) O(1) O(1)
九【代码实现】
- Java语言版
package Array;public class p66_PlusOne { public static void main(String[] args) { int[] digits = {1, 2, 3}; int[] res = plusOne(digits); for (int i = 0; i < res.length; i++) { System.out.print(res[i]); } } public static int[] plusOne(int[] digits) { int len = digits.length; for (int i = len - 1; i >= 0; i--) { if (digits[i] == 9) { digits[i] = 0; } else { digits[i]++; return digits; } } int[] res = new int[len + 1]; res[0] = 1; return res; }}
- C语言版
#include#includeint* plusOne(int* digits, int digitsSize, int* returnSize){for (int i = digitsSize - 1; i >= 0; i--){if (digits[i] == 9){digits[i] = 0;}else{digits[i]++;*returnSize = digitsSize;return digits;}}int* res = (int*)calloc((digitsSize + 1), sizeof(int));res[0] = 1;*returnSize = digitsSize + 1;return res;}/*主函数省略*/
十【提交结果】
-
Java语言版
-
C语言版