Leetcode65 Plus One

Plus One

Given a non-negative number represented as an array of digits, plus one to the number.

The digits are stored such that the most significant digit is at the head of the list.

Solution1

public class Solution {
    public int[] plusOne(int[] digits) {
        int[] result = new int[digits.length];
        int ci = 1;
        for(int i=digits.length-1;i>=0;i--){
            result[i] = digits[i]+ci;
            ci = result[i]/10;
            result[i] %= 10;
        }
        if(ci==1){
            result = new int[digits.length+1];
            result[0] = 1;
        }
        return result;        
    }
}

Solution2

  • 如果原始输入数组可以改变的话, 可以直接利用原始数组
public class Solution {
    public int[] plusOne(int[] digits) {
        int ci = 1;
        for(int i=digits.length-1;i>=0;i--){
            digits[i] += ci;
            ci = digits[i]/10;
            digits[i] %= 10;
        }
        if(ci==1){
            digits = new int[digits.length+1];
            digits[0] = 1;
        }
        return digits;    
    }
}

Solution3

  • 利用原始输入数组的话,可以提前退出。
public class Solution {
    public int[] plusOne(int[] digits) {
        int ci = 1;
        for(int i=digits.length-1;i>=0&&ci>0;i--){//当ci=0时便可以提前退出了
            digits[i] += ci;
            ci = digits[i]/10;
            digits[i] %= 10;
        }
        if(ci==1){
            digits = new int[digits.length+1];
            digits[0] = 1;
        }
        return digits;
    }
}

Solution4

  • 下面是一个绝妙的方法,诸君请看:
public class Solution {
    public int[] plusOne(int[] digits) {
        for(int i=digits.length-1;i>=0;i--){
            if(digits[i]==9) digits[i] = 0;
            else{
                digits[i]++;
                return digits;//表明不需要再加了,直接返回即可
            }
        }
        digits = new int[digits.length+1];
        digits[0] = 1;//如果能正常退出for循环,表明原数组全是9
        return digits;
    }
}
  • 当然还可以用递归的方法,但是比上面的都要复杂了, 没必要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值