leetcode-java 加一

加一

题目描述:

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:

输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。

题目分析:

这道题的重点应该就是 进位的转移,要把进位传给下一位数字,这和一些用 数组存储大数的原理 是一样的,传递进位
用 num或者 key 来存储传给下一位的进位数据,跟随循环传给下一位

需要注意的地方:
	1,存储进位数据
	2,循环的判断条件
	3,进位的传递
	4,新数组的生成和返回

代码展示(已验证):

java

//leetcode-java
class Solution {
    public int[] plusOne(int[] digits) 
    {
        int num=0;
		int i=digits.length-1;
        int[] digits1 = new int[digits.length+1]; //用来返回特定数组  99-->100
		
        digits[i] +=1;
		num = digits[i]/10;
        digits[i] %= 10;
		
        while(num>0 && i>0) //进入循环的条件就是 数值有进位
		{
			digits[--i] += num;
			if(digits[i] >= 10)    // 判断在向上进位的过程中是否有进位
			{
				num = digits[i]/10;
				digits[i] %= 10;
			}
			else
				num=0;
		}
		if(num >0)      // 如果最后一位 还有进位,就说明进位为 1,然后输出 特定数组,除了第一位,其他都是0
		{
            
			digits1[0]=1;
			for(int j=1; j<=digits.length; j++)
				digits1[j] = 0;
            return digits1;
			
		}
		return digits;
    }
}

python

// leetcode-python
class Solution(object):
    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
# 反向切片的数组赋值给 l[]
        l = digits[::-1]    
        
        l[0] +=1
        for i in range(len(l)):
            if(l[i]>9):
                l[i] -= 10
                if i != len(l) - 1:
# 进位上传
                    l[i+1] += 1
                else:
                    l.append(1)
# 将进位加到 数组后面
# 再反向切片输出
        return l[::-1]

泡泡:

进位传递的思想和用法还是比较多的,数组存储大数就是典型的应用,注意一下 循环的 结束条件和进位的传递就好了。

你可能感兴趣的:(leetcode,java,python)