前端-每天一道算法题-002:加一

137 阅读2分钟

说明:

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

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

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

leetcode链接->leetcode.cn/problems/pl…

示例

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

思路

先将数组转换成字符串,在转换成数字进行加一操作,然后再逆向转回数组。

Tips:

JavaScript现在支持了两种数值类型: NumberBigInt 类型。

我们可以通过内置的 Number() 函数把字符串类型的值转化为Number类型,但是有可能损失精度。因为在JavaScript中,使用双精度64位浮点数格式来表示Number类型的值,Number类型能够安全表示的最大整数为 2^53-1 ,超过的话就会自动进行四舍五入。

而BigInt类型就是能够表示任意精度的整数(BigInt字面量的表示是在一个整数后面添加一个小写字母’n’,中间不能有空格),同时需要注意的是不能把 BigInt 类型的值和 Number 的值一起混合进行 数学运算

const nums = [2, 3, 4, 5, 5, 6, 7, 8, 8, 1, 9]
const str = nums.join('')
console.log('str', str);            // str 23455678819
const num = BigInt(str)
console.log('num', num);            // num 23455678819n
const numPlus = num + BigInt(1)
console.log('numPlus', numPlus);    // numPlus 23455678820n
const strPlus = numPlus.toString()
console.log('strPlus', strPlus);    // strPlus 23455678820
const numsPlus = strPlus.split('')
console.log('numsPlus', numsPlus);  // numsPlus [2, 3, 4, 5, 5, 6, 7, 8, 8, 2, 0]

欢乐的做题时光总是如此短暂,有更好的方法可以评论区分享,下次再见!