leetCode – 加一
题目描述
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/plus-one
测试事例
示例 1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
示例 2:
输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。
示例 3:
输入:digits = [0]
输出:[1]
题目分析
- 加一有两种情况,一种是除了9之外的加一
- 直接最后一个数加一返回
- 如果是9,则需要加一循环判断没有进位再返回
解题方法
一.普通思路
解题思路
- 判断最后一位数是并不是9,如果不是就返回
- 如果是,让最后一位为0,然后继续执行下一次判断
- 如果全部是0,那么就创建一个新数组,让首位为1
解题代码
class Solution {
public int[] plusOne(int[] digits) {
//思路
//1.首先判断最后一位数是不是9
//2. 如果不是9,则最后一位加1
//3.如果是9,则最后一位变为0,再进行下一轮判断
//4.下一轮如果不是9,那就加1返回,如果是9那也变为零
//5.进入到下一次循环,相当于进位
for(int i = digits.length -1;i >= 0; i--){
if(digits[i] != 9){
digits[i] ++;
return digits;
}
digits[i] = 0;
}
int[] res = new int[digits.length + 1];
res[0] = 1;
return res;
}
}
测试结果
二. 先加一再取余
解题思路
- 先将最后一位加一,对10取余
- 如果余数为0,这说明最后一位是9
- 如果是不是直接返回
解题代码
class Solution {
public int[] plusOne(int[] digits) {
for(int i = digits.length -1;i >= 0; i--){
//先加一再去取余
digits[i] ++;
//让最后一位直接等于取余的数
//如果除不尽刚好就是最后一位是余数,如果是0,说明是9
digits[i] = digits[i]%10;
//判断是不是为0
if(digits[i] != 0){
return digits;
}
}
//如果全部为9
int[] res = new int[digits.length + 1];
res[0] = 1;
return res;
}
}