题目
给定一个非负整数组成的非空数组,给整数加一。
可以假设整数不包含任何前导零,除了数字0本身。
最高位数字存放在列表的首位。
思路
大数相加的简单版本。关键是对于999这样的数字的处理,加一后结果为1000,长度与原数组不同。
请看代码吧!
代码
import java.util.Scanner;
import java.util.Arrays;
public class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] arr = new int[n];
for(int i = 0; i < n; i++)
arr[i] = scanner.nextInt();
System.out.println(Arrays.toString(solution.plusOne(arr)));
}
public int[] plusOne(int[] digits) {
if(digits == null || digits.length == 0) return null;
int len = digits.length;
int[] ans = new int[len];
int carry = 1;
for(int i = len - 1; i >= 0; i--) {
ans[i] = (digits[i] + carry) % 10;
carry = (digits[i] + carry) / 10;
}
//还有进位说明为999这种形式的数
if(carry == 1) {
int[] newAns = new int[len+1];
newAns[0] = 1;
for(int i = 1; i <= len; i++)
newAns[i] = 0;
return newAns;
}
return ans;
}
}
网友评论