Plus One 十进制数加一@LeetCode

来源:互联网 发布:周立功单片机教程 编辑:程序博客网 时间:2024/06/05 13:34

题目:

给定一个十进制数,用数组表示每一位,要求返回加一后的结果

思路:

从数组尾部到头部处理,用一个overflow flag来判断是否溢出,如果溢出则需要新开一个array


注意:

arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 


import java.util.Arrays;/** * Plus One *  * Given a number represented as an array of digits, plus one to the number. */public class S66 {public static void main(String[] args) {int[] digits = {9,9,9};//int[] digits = {0};System.out.println(Arrays.toString(plusOne(digits)));}public static int[] plusOne(int[] digits) {int i = digits.length-1;int overflow = 0;// 用来表示是否overflow了// 从尾到头加        while(i >= 0){        if(digits[i]+1 > 9){// 加完大于9的情况        digits[i] = 0;        overflow = 1;        i--;        }else{// 加完小于10的情况        digits[i] = digits[i]+1;        return digits;        }        }                // 这种情况是当前位数不够用,就必须新开数组,        // 处理首位        if(overflow > 0){        int[] newDigits = new int[digits.length+1];        System.arraycopy(digits, 0, newDigits, 1, digits.length);        newDigits[0] = 1;        newDigits[1] = 0;        return newDigits;        }                return digits;    }}



public class Solution {    public int[] plusOne(int[] digits) {        int[] ret = new int[digits.length];        int i = digits.length-1;        int c = 0;  // carry        while(i >= 0){            int val = digits[i];            if(i==digits.length-1){     // rightmost                val += c + 1;            }else if(c > 0){            // carry                val += c;            }            if(val > 9){                ret[i] = 0;                c = 1;            }else{                ret[i] = val;                c = 0;            }            i--;        }        if(c == 1){            int[] copy = new int[digits.length+1];            System.arraycopy(copy, 1, ret, 0, ret.length);            copy[0] = 1;            return copy;        }else{            return ret;        }            }}





原创粉丝点击