3640、加一
原创
©著作权归作者所有:来自51CTO博客作者FansUnion的原创作品,请联系作者获取转载授权,否则将追究法律责任
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 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
来源:力扣(LeetCode)
链接:力扣 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
package cn.fansunion.leecode.number;
/**
* 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
*
* 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
*
* 你可以假设除了整数 0 之外,这个整数不会以零开头。
*
* 来源:力扣(LeetCode) 链接:力扣
*
* @author wen.lei@brgroup.com
*
* 2022-1-26
*/
public class PlusOne {
/**
* 输入:digits = [1,2,3],输出:[1,2,4]
* @param digits
* @return
*/
public int[] plusOne(int[] digits) {
//数字+1,考虑到进位,可以理解为,小数位直接进到个位数
int plus = 1;
//个位数一定+1.从后向前,如有累计进位,逐个+1
for (int index = digits.length - 1; index >= 0; index--) {
int sum = digits[index] + plus;
if (sum ==10) {
digits[index] = 0;
plus = 1;
} else {
digits[index] = sum;
plus = 0;
}
}
//最高位没有进1,返回
if (plus == 0) {
return digits;
} else {
//最高位进1,原有数组空间不够了
int[] digitsNew = new int[digits.length + 1];
digitsNew[0] = 1;
//因为只+1,高位进1的前提肯定是后面的全都是999,都变为0了,数组默认为0
//for循环其实可以不用
for (int index = 0; index < digits.length; index++) {
digitsNew[index + 1] = digits[index];
}
return digitsNew;
}
}
}
|
package test.leecode.number;
import org.junit.Assert;
import org.junit.Test;
import cn.fansunion.leecode.number.PlusOne;
/**
* @author wen.lei@brgroup.com
*
* 2022-1-27
*/
public class PlusOneTest {
@Test
public void test() {
PlusOne plusOne = new PlusOne();
//123+1
int[] digits123=new int[] {1,2,3};
int[] digits124=plusOne.plusOne(digits123);
int[] digits124Array=new int[] {1,2,4};
Assert.assertArrayEquals(digits124Array, digits124);
//0
int[] digits0=new int[] {0};
int[] digits1=plusOne.plusOne(digits0);
int[] digits1Array=new int[] {1};
Assert.assertArrayEquals(digits1Array, digits1);
// 9 9 9
int[] digits999=new int[] {9,9,9};
int[] digits1000=plusOne.plusOne(digits999);
int[] digits1000Array=new int[] {1,0,0,0};
Assert.assertArrayEquals(digits1000Array, digits1000);
}
}
|