给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
1 <= digits.length <= 100
0 <= digits[i] <= 9
解题思路
- java大数。暴力办法解题。把数组转换为字符串后,加成数字,比如 [1,2,3] 转换为123,然后加一,注意数组长度最大为100,而java处理8位以上普通int类型会直接溢出。故使用java大数类
BigInteger
。暴力直接加一即可。此算法优点简单,缺点算法比较呆。。。。
算法:
if (digits[0]==0){
digits[0]=1;
return digits;
}else {
BigInteger sum = new BigInteger("1");
BigInteger shi = new BigInteger("10");
for (int i = 0; i < digits.length; i++) {
BigInteger num=shi.pow(digits.length-i-1);
BigInteger a=num.multiply(BigInteger.valueOf(digits[i]));
sum=sum.add(a);
}
String str=String.valueOf(sum);
int arr[]=new int[str.length()];
for (int i = 0; i < str.length(); i++) {
Character ch=str.charAt(i);
arr[i]=Integer.parseInt(ch.toString());
}
return arr;
}
- 另一思路。加一有两种情况:
- 除如99,999等 之外的数字加一;
- 数字 99。加一得十,进一位后数组长度直接延长一。
算法:
for (int i = digits.length-1; i >=0 ; i--) {
digits[i]++;
digits[i]=digits[i]%10; //小于10的数字模10还是原数
if (digits[i]!=0){
return digits;//直接退出循环
}
}
digits=new int[digits.length+1];//数组延长一位
digits[0]=1;//第一位直接为0
return digits;
原题地址:https://leetcode-cn.com/problems/plus-one/