Day36 加一
2021-03-02 本文已影响0人
Shimmer_
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一
https://leetcode-cn.com/problems/plus-one/
数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
示例2:
输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。
示例3:
输入:digits = [0]
输出:[1]
提示:
1 <= digits.length <= 100
0 <= digits[i] <= 9
Java解法
思路:
- 比较简单,只要考虑进位问题即可
- 倒序+1计算,变量存储进位值,遍历完成时如果需要进位,则需要对原数组进行copy赋值满足最大位进位
package sj.shimmer.algorithm.m2;
import sj.shimmer.algorithm.Utils;
/**
* Created by SJ on 2021/3/1.
*/
class D36 {
public static void main(String[] args) {
Utils.logArray(plusOne(new int[]{1, 2, 3, 4, 5, 6}));
Utils.logArray(plusOne(new int[]{9,9,9}));
}
public static int[] plusOne(int[] digits) {
if (digits != null && digits.length > 0) {
int length = digits.length;
int sum = digits[length - 1] + 1;
digits[length - 1] = sum % 10;
int temp = sum / 10;
int i = length - 2;
while (i >= 0 && temp > 0) {
sum = digits[i] + temp;
digits[i] = sum % 10;
temp = sum / 10;
i--;
}
if (temp>0) {
int[] result = new int[length+1];
result[0] = temp;
for (int j = 1; j < result.length; j++) {
result[j] = digits[j-1];
}
return result;
}
}
return digits;
}
}
image
参考解
https://leetcode-cn.com/problems/plus-one/solution/java-shu-xue-jie-ti-by-yhhzw/
发生进位时,说明全是9,直接长度+1,后面全为0,不用赋值
public int[] plusOne(int[] digits) { for (int i = digits.length - 1; i >= 0; i--) { digits[i]++; digits[i] = digits[i] % 10; if (digits[i] != 0) return digits; } digits = new int[digits.length + 1]; digits[0] = 1; return digits; }
逻辑优化的确实很好(坏处是需要理解时间)