第一次提交
把数组转化为数字,利用了数字运算特性加1,但是有点麻烦,而且数字有大小问题,js里面不能超过9007199254740992,否则就会出现不精确的问题
var plusOne = function (digits) {
if (digits.length > 15) {
const multiple = Math.ceil(digits.length / 15);
const newArr = [];
for (let i = 0; i < multiple; i++) {
newArr.push(digits.slice(i * 15, (i + 1) * 15))
}
for (var i = newArr.length - 1; i >= 0; i--) {
const arr = newArr[i];
const length = arr.length;
const num = parseInt(arr.join(''));
const zeroNum = length - num.toString().length;
if ((times('0',zeroNum)+((num+1).toString())).length === length) {
newArr[i] = (times('0',zeroNum)+(num+1).toString()).split('');
break;
}else{
if(i === 0){
newArr[i] = (num+1).toString().substring(0).split('');
}else{
newArr[i] = (num+1).toString().substring(1).split('');
}
}
}
return newArr.reduce(function (arr,item) {
return arr.concat(item)
},[]);
} else {
const num = parseInt(digits.join(''));
return (num + 1).toString().split('');
}
};
function times(str, num){
return new Array(parseInt(num)+1).join(str);
}
第二次提交
第二次提交就没使用转化为数字的方式,直接在数组上面操作
var plusOne = function (digits) {
if(digits.length>15){
for (let i = digits.length-1; i >= 0; i--) {
if (digits[i] === 9) {
digits[i] = 0;
if (i === 0) {
digits.unshift(1)
}
} else {
digits[i] += 1;
break;
}
}
return digits
}else{
const num = parseInt(digits.join(''));
return (num + 1).toString().split('');
}
};
最佳实现
容我再细细品味
var plusOne = function(digits) {
var count = digits.length-1
var plusNum = digits[count] = digits[count] + 1
while(plusNum>=10){
digits[count] = 0
var count = count - 1
if(count < 0){
digits.unshift(1)
break
}
plusNum = digits[count] = digits[count] + 1
}
return digits
};
网友评论