66. Plus One

来源:互联网 发布:java泛型类型擦除 编辑:程序博客网 时间:2024/05/21 00:44

Problem:

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.

Analysis:
题目意思:将一个非负整数的每个数字都放到一个数组中,高位在前,如34,放到数组中为[3][4],给这个数字加1,然后返回数组。
注意:

  • 考虑进位情况,每一位都要考虑,而且有可能最高位也需要进位,这时候数组位数不够,需要新建数组,然后赋值。
  • CodeGanker分析.
    “我自己在Google的电面中就遇到了这道题,我觉得为什么Google喜欢的原因是后续可以问一些比较基本的扩展问题,比如可以扩展这个到两个数组相加,或者问一些OO设计,假设现在要设计一个BigInteger类,那么需要什么构造函数,然后用什么数据结构好,用数组和链表各有什么优劣势。这些问题虽然不是很难,但是可以考到一些基本的理解,所以平时准备有机会还是可以多想想哈”

Anwser:

public class Solution {    public int[] plusOne(int[] digits) {        int length=digits.length;//后面多处用到digits.length,赋值新变量后减少计算次数。        if(length==0) return digits;        int flag=1;////设置进位标识,初始值为1,意为数组最后一位+1操作        int temp=0;        for(int i=length-1;i>=0;i--){            temp=digits[i]+flag;            if(temp>=10) flag=1;            else flag=0;            digits[i]=temp%10;        }        //如果digits数组第一个数加flag大于10,即须要进位,则需要新建一个数组,第一位赋值1,其余位赋值digits各位。        if(flag==1){                int[] result= new int[length+1];                result[0]=1;                for(int j=1;j<=length;j++){                    result[j]=digits[j-1];                }                return result;            }        else return digits;    }}
0 0
原创粉丝点击