leetCode-066 - 加一(plus-one)

066 - 加一(plus-one)

/*
 * @Author: lvjingshuai 
 * @Date: 2019-07-25 06:21:12 
 * @Last Modified by: lvjingshuai
 * @Last Modified time: 2019-08-21
 */
文章结构
1、题目介绍
2、解题
2.1 解法 - 数学思维
3、每日一问

1、题目介绍

  • 难度:简单 (系统学习算法与数据结构)
  • 涉及知识:数组
  • 题目编号:066
  • 题目地址:https://leetcode-cn.com/problems/plus-one/
  • 题目内容:
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。

示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。

2、解题

2.1 解法 - 数学思维

解题思路:

  1. 这道题一开始的思路是数组转字符串再转Number类型,之后加一,再转回原来的数组

  2. 第一次解题代码如下:

var plusOne = function(target) {
   const lastNumber = Number(target.join('')) + 1;
   const lastResult = String(lastNumber).split('');
   return lastResult
};
  1. 这里的解题思路是有问题的,问题出在,一旦转换类型,Number是有最大最小值的,即有效值,我查了一下为:9007199254740992(16 位数),而题目中的数组的长度不止16位,而在JS中 超过最大值后,计算会出现不精确的问题。

  2. 因为按题目,需要最后一位+1,所以我们从结尾开始循环遍历,直到 i 小于 0 的时候终止循环。

  3. 每次循环自增+1以后,我们需要判断当前位是否满10,是否需要进1,所以我们会先让其 (末位 + 1) % 10。因为我们知道,19 中任意的数 % 10,得到的答案还是 1 - 9,但是 10 % 10,得到的答案是 0

解题代码:

var plusOne = function(digits) {
  for (let i = digits.length - 1; i >=0; i--) {
    digits[i]++;
    digits[i] = digits[i] % 10;
    if (digits[i] > 0) {
      return digits;
    }
  }
  return [1, ...digits];
};

执行测试:

  1. digits[9, 9, 9]
  2. return[1, 0, 0, 0]

3、每日一题

webpack有哪些优点,缺点

webpack有哪些优点

  1. 专注于处理模块化的项目,能做到开箱即用,一步到位
  2. 可通过plugin扩展,完整好用又不失灵活
  3. 使用场景不局限于web开发
  4. 社区庞大活跃,经常引入紧跟时代发展的新特性,能为大多数场景找到已有的开源扩展良好的开发体验

webpack的缺点

  1. 只能用于采用模块化开发的项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值