10、leetcode66. 加一
解法一:
思路:
1、末位无进位,则末位加一即可,因为末位无进位,前面也不可能产生进位,比如 45 => 46。2、末位有进位,在中间位置进位停止,则需要找到进位的典型标志,即为当前位 %10 后为 0,则前一位加 1,直到不为 0 为止,比如 499 => 500。3、末位有进位,并且一直进位到最前方导致结果多出一位,对于这种情况,需要在第 2 种情况遍历结束的基础上,进行单独处理,比如 999 => 1000
代码:
/**
* @author lihe
* @date 2019/10/16 14:50
* @descriptor 66. 加一
*/
public class PlusOne_66 {
public static int[] plusOne1(int[] digits) {
for (int i = digits.length-1; i>=0; i--) {
digits[i]++;
digits[i] %= 10;
if(digits[i] != 0)
return digits;
}
int[] digit = new int[digits.length+1];
digit[0] = 1;
return digit;
}
public static void main(String[] args) {
int[] arr = {9};
int[] ints = plusOne1(arr);
System.out.println(Arrays.toString(ints));
}
}
解法二:
代码:
/**
* @author lihe
* @date 2019/10/16 14:50
* @descriptor 66. 加一
*/
public class PlusOne_66 {
public static int[] plusOne(int[] digits) {
int[] sum = new int[digits.length+1];
int i = digits.length;
int K = 1;
int j = 0;
while(--i >= 0 || K > 0) {
if(i >= 0)
K = digits[i] + K;
sum[j++] = K % 10;
K = K / 10;
}
for (int k = 0; k < sum.length/2; k++) {
swap(sum,k,sum.length-k-1);
}
if(sum[0]==0)
sum = Arrays.copyOfRange(sum, 1, sum.length);
return sum;
}
private static void swap(int[] sum, int k, int i) {
int temp = sum[k];
sum[k] = sum[i];
sum[i] = temp;
}
public static void main(String[] args) {
int[] arr = {9};
int[] ints = plusOne1(arr);
System.out.println(Arrays.toString(ints));
}
}