博主并没有什么算法基础,所以写的不好,勿喷,抛砖引玉,欢迎交流,感谢。
//给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
// 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
// 你可以假设除了整数 0 之外,这个整数不会以零开头。
// 示例 1:
// 输入: [1,2,3]
//输出: [1,2,4]
//解释: 输入数组表示数字 123。
// 示例 2:
// 输入: [4,3,2,1]
//输出: [4,3,2,2]
//解释: 输入数组表示数字 4321。
//
// Related Topics 数组
// 👍 540 👎 0
package com.zqh.leetcode.editor.cn;
import java.util.Arrays;
//Java:加一
public class P66PlusOne {
public static void main(String[] args) {
Solution solution = new P66PlusOne().new Solution();
System.out.println(Arrays.toString(solution.plusOne(new int[]{1, 2, 3})));
System.out.println(Arrays.toString(solution.plusOne(new int[]{1, 2, 9})));
System.out.println(Arrays.toString(solution.plusOne(new int[]{9})));
System.out.println(Arrays.toString(solution.plusOne(new int[]{9, 9})));
System.out.println(Arrays.toString(solution.plusOne(new int[]{9, 9, 9})));
// TO TEST
}
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public int[] plusOne(int[] digits) {
return add(digits, 1);
}
public int[] add(int[] digits, int index) {
if (digits.length >= index && digits[digits.length - index] == 9) {
//判断是9的话就变成0
digits[digits.length - index] = 0;
return add(digits, ++index);
} else {
if (digits.length < index) {
//说明原素组长度无法满足,所以就copy了一个
int[] newInt = new int[digits.length + 1];
System.arraycopy(digits, 0, newInt, 0, digits.length);
//将首位变成1
newInt[newInt.length - index] = 1;
return newInt;
}
//不需要进位直接加一就好了
digits[digits.length - index] = digits[digits.length - index] + 1;
return digits;
}
}
}
//leetcode submit region end(Prohibit modification and deletion)
}
//if (digits[digits.length - 1] == 10) {
// int[] newInt = new int[digits.length + 1];
// System.arraycopy(digits, 0, newInt, 0, digits.length);
// newInt[newInt.length - 2] = 1;
// newInt[newInt.length - 1] = 0;
// return newInt;
// }