Java给定一个非空数组_leetcode踩坑记:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。...

题目:

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

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

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

//示例一

输入: [1,2,3]

输出: [1,2,4]

解释: 输入数组表示数字 123。

//示例二

输入: [4,3,2,1]

输出: [4,3,2,2]

解释: 输入数组表示数字 4321。

//验证示例:

[1,2,3] > [1,2,4]

[9] > [1,0]

[9,9,9] > [1,0,0,0]

[6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3] >

[6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,4]

解答:

错误方法: 看到这个题 第一反应都是 把数组变成数字 然后加一,接着把数字打散变回字符串

// 这个能解决大部分的问题, 但是digits.length 太大是 在转换成数字的时候会出现浮点数 导致结果不准

var plusOne = function(digits) {

var countNum = Number(digits.join().replace(/\,/g,'')) + 1;

var newArr = String(countNum).split('');

newArr.map(function(v,i){newArr[i] = parseInt(v)});

return newArr;

};

plusOne([1,2,3]) // [1,2,4]

plusOne([6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3]) // [6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,0,0,0]

/*一直在检查编码哪算错了

才发现是数值太大 转成了浮点数

Number("6145390195186705543")

"6145390195186705543"*1

parseInt("6145390195186705543")

以上3都会转换成:6145390195186705000

*/

正确方法:数组逐个数字的计算,一直递归上去

var plusOne = function(digits) {

var locationNum = digits.length - 1; //初始化在最后一位

function count_alone(index){

// 处理数字少于9的 直接当前位置+1

if(digits[index] < 9){

digits[index] = digits[index]+1;

return digits;

}else{

//当前位置的值标记为0,位置-1继续递归

digits[index] = 0;

locationNum --;

if(index == 0){

digits.unshift(1);

}else{

count_alone(locationNum);

}

}

}

count_alone(locationNum);

return digits;

};

mark一下 仅供参考 欢迎更正补充 end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值