Skip to content

Latest commit

 

History

History
56 lines (50 loc) · 1.62 KB

66.md

File metadata and controls

56 lines (50 loc) · 1.62 KB

66. Plus One

Given a non-negative number represented as an array of digits, plus one to the number. The digits are stored such that the most significant digit is at the head of the list.

给定一个非负的数字并将它按位存放到数组中,将这个数字加一。

这道题比较简单,加法运算进位问题。

/**
 * @param {number[]} digits
 * @return {number[]}
 */
var plusOne = function(digits) {
  var flag = true;
  for (var i = digits.length - 1; i >= 0; i--) {
    if (flag) {
      digits[i]++;
      if (digits[i] !== 10) {
        flag = false;
        break;
      } else {
        digits[i] = 0;
      }
    }
  }
  if (flag) digits.unshift(1);
  return digits;
};
108 / 108 test cases passed.
Status: Accepted
Runtime: 148 ms

竟然排在了第二档,beats 97.73%。


试了一个很想当然的方法,就是先把数字数组转成字符串,然后利用js+string自动转换成数字的特点解决这道题,试了几个数没问题,提交却WA了,原来是测试用例中有的数字太大,溢出了。

在JavaScript中,Number类型统一按浮点数处理,64位存储,整数是按最大54位来算最大最小数的,否则会丧失精度;某些操作(如数组索引还有位操作)是按32位处理的。

浮点数范围:

as  large  as ±1.7976931348623157 × 10的308次方
as small as ±5 × 10的−324次方

精确整数范围:

The JavaScript number format allows you to exactly represent all integers between
−9007199254740992  and 9007199254740992 (即正负2的53次方)

数组索引还有位操作:

正负2的31次方