leeCode算法--计算加1问题

题目:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。

解析:题目中看似比较简单只是计算了一个数字加上1而已,但是这里却有不少的坑,比如:

  • 最后加一后是不是需要向前一位进一;
  • 加一之后,有那些位需要进一
  • 如果一个数字加一后,比原来的数多了一位怎么办。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
let plusOne = digits => {
if (!digits.length) {
return
}
// 数字要从后向前遍历
for (let i = digits.length - 1;i >= 0; i--) {
// 从后向前加一
digits[i]++
if (digits[i] >= 10) {
// 如果某一位数加一大于等于10
// 将本位数改为0,前一位数加一
digits[i] = 0
} else {
// 否则,说明只是简单的加一,直接返回数组极好
return digits
}
}
// 当出现加完一后,新数要比原数多一位,只需要在最前面加1就好
digits.unshift(1)
return digits
}

yes, do you understand?

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2022 Lee
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信