刷爆LeetCode之 加一

加一

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

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

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

示例 1:

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

示例 2:

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

解题思路:

首先判断最后一位是否是9,若不是就最后一位加一返回。

最后一位若是9吗,则对数组进行从后往前的遍历,找到第一位不是9的数。给这个数加一,其后的数字全部置为0.

倘若全部是9,则建立一个新的数字,长度比原数组大一,把第一位置为1,其后所有的数都为0.

代码如下:

public static int[] plusOne(int[] digits) {
        if(digits[digits.length-1]!=9) {	//判断最后一位是否为9
        	digits[digits.length-1]+=1;
        	return digits;
        }
        int i=digits.length-1;
        while(digits[i]==9 && i>0) {	//从后向前遍历数组,找到第一位不是9的数的位子
        	i--;
        }
      
       if(i!=0 || (i==0 && digits[i]!=9)) { //若这个数不是最后一位 则给这个数加一,其后所有的数置为0.
    	   digits[i]+=1;
    	   for(int j=i+1;j<digits.length;j++) {
    		   digits[j]=0;
    	   }
    	   return digits;
       }
       else {	//否则新建数组,第一位为,其后所所有数字都为0.
    	   int [] re = new int [digits.length+1];
    	   for(int j=0;j<re.length;j++) {
    		   if(j==0) {
    			   re[j]=1;
    		   }
    		   else {
    			   re[j]=0;
    		   }
    	   }
    	   return re;
       }
	
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值