一、题目
1、算法题目
“给定一个由整数组成的数组,在该数的基础上加一。”
题目链接:
来源:力扣(LeetCode)
链接:66. 加一 - 力扣(LeetCode) (leetcode-cn.com)
2、题目描述
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1: 输入: digits = [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123。 复制代码
示例 2: 输入: digits = [4,3,2,1] 输出: [4,3,2,2] 解释: 输入数组表示数字 4321。 复制代码
二、解题
1、思路分析
找出最长的后缀9,对于数组digits来说,如果末尾没有9,末尾加1即可。
末尾有若干个9,那么只需要找出从末尾开始第一个不为9的元素,将该元素加1,后面的9全部归零,然后返回。
对于数组元素全部都是9的情况,只需要构造一个比原来数组大于1的新数组,将首元素设1,其余元素为0即可。
接下来,就需要逆序遍历数组,找出9元素。
2、代码实现
代码参考:
public class Solution { public int[] PlusOne(int[] digits) { int n = digits.Length; for (int i = n - 1; i >= 0; --i) { if (digits[i] != 9) { ++digits[i]; for (int j = i + 1; j < n; ++j) { digits[j] = 0; } return digits; } } // digits 中所有的元素均为 9 int[] ans = new int[n + 1]; ans[0] = 1; return ans; } } 复制代码
网络异常,图片无法展示
|
3、时间复杂度
时间复杂度 : O(n)
其中n是数组的长度,只需要遍历一遍数组即可求得答案。
空间复杂度: O(1)
只需要常数级别的空间存放变量。
三、总结
不能用转换成数字然后加了之后再转换成数组的想法哦,会溢出的。