给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数0之外,这个整数不会以零开头。
提示:
1 <= digits.length <= 1000 <= digits[i] <= 9
示例:
输入: digits = [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
题解:
/**
* @description: 模拟法 TC:O(n) SC:O(1)
* @author: JunLiangWang
* @param {*} digits 给定数组
* @return {*}
*/
function simulation(digits){
/**
* 本方案利用模拟的方式,从后到前依次遍历数组给元素加一,
* 当元素加一后并不需要进位(即:<10),此时直接跳出循环返回
* 结果即可,当元素需要进位则继续循环重复上一步骤。当遍历
* 完所有元素,仍有进位,则在数组开头添加元素1。
*/
// 从后向前遍历数组
for(let i=digits.length-1;i>=0;i--){
// 给元素+1
let sum=digits[i]+1;
// 将加一后的元素对10取余后重新赋值给元素
// 之所以对10取余是防止进位的情况
digits[i]=sum%10;
// 当加一对10取余后仍等于加一时的值,证明
// 无进位的情况,直接返回即可
if(digits[i]===sum)return digits;
}
// 遍历完所有元素并未跳出,证明还需要进一位
// 在数组开头添加一个1元素
digits.splice(0,0,1);
// 返回结果
return digits;
}
来源:力扣(LeetCode)