leetcode刷题笔记
力扣66题—加一
题目:
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 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,需要进位
- 数组是999/9999这样的类型,即每一位都是需要进位的
题解思路
针对题意分析,我们可以知道
- 如果数组最后一位小于9,则直接加一返回,因为既然最后一位小于9,则数组的每一位都不会有进位的可能
- 数组最后一位等于9,我们可以遍历整个数组,让每一位等于9的都赋值为0,或者直接先加一,然后%10取余,对这个余数进行判断,如果不等于0,则需要进位
- 数组是999/9999这样的类型,如[9,9,9,9],我们可以想象这个数组加一后是[1,0,0,0,0],即每一位数都加一,则我们可以创建一个新的数组,长度为原数组的长度加一,再把第一位赋值为0即我们想要得到的结果。
代码
//解法一
class Solution {
public int[] plusOne(int[] digits) {
for (int i = digits.length - 1; i >= 0; i--) {
//先对其加一,去余数,再判断
digits[i]++;
digits[i] = digits[i] % 10;
//输出查看
System.out.println(digits[i]);
if (digits[i] != 0) return digits;
}
//所有数组都是9类型的数组
digits = new int[digits.length + 1];
digits[0] = 1;
return digits;
}
}
//解法二
class Solution {
public int[] plusOne(int[] digits) {
for (int i = digits.length - 1; i >= 0; i--) {
//等于9直接赋值为0
if (digits[i] == 9) {
digits[i] = 0;
}else {
digits[i]++;
return digits;
}
}
//所有数组都是9类型的数组
digits = new int[digits.length + 1];
digits[0] = 1;
return digits;
}
}