返回
JavaScript LeetCode 66:加一,代码实战与技巧解密
前端
2023-09-09 12:19:12
前言
在计算机编程中,处理数字加法是常见且重要的任务。LeetCode 66. 加一 题正是此类问题的经典范例,它要求我们对给定的整数数组表示的非负整数进行加一操作。
算法原理
对于非负整数数组 nums
,加一操作的算法原理很简单:从数组的最低有效位开始,依次对每一位数字进行加一操作。如果加一后数字溢出(即超过 9),则将该位重置为 0 并将进位标志设置为 1,继续对下一位数字进行加一。
代码实现
/**
* LeetCode 66. 加一
* @param {number[]} nums 非负整数数组
* @return {number[]} 加一后的数组
*/
const plusOne = (nums) => {
// 从最低位开始遍历数组
for (let i = nums.length - 1; i >= 0; i--) {
// 将当前位加一
nums[i] += 1;
// 如果进位为 0,则停止遍历
if (nums[i] < 10) {
return nums;
}
// 进位为 1,则将当前位重置为 0
nums[i] = 0;
}
// 如果所有位都进位,则在数组开头添加 1
nums.unshift(1);
return nums;
};
优化技巧
为了优化代码性能,可以采用以下技巧:
- 利用数组的
reverse
方法: 由于从最低位开始遍历数组,可以使用reverse
方法将数组反转,这样可以简化代码结构。 - 使用模运算: 对于加一操作,可以利用模运算
%
技巧进行优化。例如,(nums[i] + 1) % 10
可以获得加一后的数字的个位数。 - 提前退出循环: 如果在遍历过程中发现某位数字加一后不进位,则可以提前退出循环。
完整代码(优化版)
/**
* LeetCode 66. 加一
* @param {number[]} nums 非负整数数组
* @return {number[]} 加一后的数组
*/
const plusOne = (nums) => {
// 反转数组
nums.reverse();
// 从最低位开始遍历数组
for (let i = 0; i < nums.length; i++) {
// 加一并取个位数
nums[i] = (nums[i] + 1) % 10;
// 如果不进位,则停止遍历
if (nums[i] !== 0) {
return nums.reverse();
}
}
// 如果所有位都进位,则在数组开头添加 1
nums.unshift(1);
return nums;
};
示例
console.log(plusOne([1, 2, 3])); // [1, 2, 4]
console.log(plusOne([9, 9, 9])); // [1, 0, 0, 0]
console.log(plusOne([0])); // [1]
总结
通过对 LeetCode 66. 加一 题的深入分析,我们不仅掌握了算法原理和代码实现技巧,还了解了如何通过优化技术提升代码性能。掌握这些知识,可以为我们解决更多复杂的数据操作问题奠定坚实的基础。