学习目标:
目标:熟练运用 Java所学知识
题目内容:
本文内容: 使用Java实现:加一
题目描述
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 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]
解题思路
刚看到这个题还是挺懵逼的,大概懂了之后也有个最开始的思路,最开始想的是将数组转化为整型,在加一,在转化为数组,这个思路也不难,但是力扣用例居然有一个{0,0},我的程序算出来就是{1},但正确答案却是{0,1}。
只能换了种思路:
从后向前遍历数组,如果遇到的数字不是9,则加一并且返回数组,如果是9,则当前位赋值为0,继续进行循环到前一位,如果不是9,则加一返回,一直往复,知道遍历全部数组元素,当数组元素全部为9,则新建一个长度比原数组大一个长度的数组,第一位赋值1,其他为0;
实现代码
public class Practice_01 {
public static void main(String[] args) {
//给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数
//组中每个元素只存储单个数字。(注意:你要防止的是第一个数字是9或者最后一个是9哈!这种情况会有进位滴)
int[] a={
1,1,9};
System.out.println(Arrays.toString(plusOne(a)));
}
public static int[] plusOne(int[] digits){
for (int i = digits.length - 1; i >= 0; i--) {
if (digits[i] != 9) {
//如果不是9直接加一返回
digits[i]++;
return digits;
}
digits[i] = 0;//如果当前位是9,则需要进位,当前位赋值为0,前一位加一
}
//跳出for循环,说明数字全部是9
int[] result = new int[digits.length + 1];
result[0] = 1;
return result;
}
}
运行结果
[1, 2, 0]