力扣66题---加一

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;
	 }
}

猜你喜欢

转载自blog.csdn.net/huiNB/article/details/113004987