算法题:66. 加一
题
思路
这题初看根本不知道描述的是什么鬼,后面慢慢看示例才知道:把数组转成数字再加1,然后再还原成数组,且每个数字为数组的一个item。
既然理清题意那么就简单了,直接按照题意解就是:
- 倒序遍历,每个值加1,并且设置该值为值余10
- 因为单个值最大为9,那么超出9的话,取的余一定是0,所以如果当前余值不是0,那么直接返回数组即可
- 到最后遍历完都没return的话,即表示原值为9,99,999...,那么只要给数组前加1即可
代码
function plusOne(digits: number[]): number[] {
for(let i = digits.length - 1; i >= 0; i--){
digits[i] = (digits[i] + 1) % 10;
if(digits[i] !== 0){
return digits;
}
}
return [1, ...digits];
};
优化
数组结构这里可以再优化:既然都是0,那么只要第一位设置为1然后最后面添加一个0即可。
function plusOne(digits: number[]): number[] {
for(let i = digits.length - 1; i >= 0; i--){
digits[i] = (digits[i] + 1) % 10;
if(digits[i] !== 0){
return digits;
}
}
digits[0] = 1;
digits[digits.length] = 0;
return digits;
};
评论