66Plus One

来源:互联网 发布:华尔街英语 知乎 编辑:程序博客网 时间:2024/06/04 20:06

题目链接:https://leetcode.com/problems/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.

解题思路:

  1. 保持一个进位变量。
  2. 数组的每一位都需要考虑该位数字是不是等于 9,以及进位是否为 1。

需要注意的是,当最高位有进位时,需要开辟新的数组,以满足增加的最高位,并把最高位赋值为 1,此时其它位都为 0。

注意:
为了使算法只遍历一次数组,不需要过早开辟长度大于 digits.length 的新数组。因为只有当原始数据的所有数位都为 9 时,最高位进位才会发生。

public class Solution {    public int[] plusOne(int[] digits) {        if(digits == null || digits.length == 0)            return digits;        int len = digits.length;        int[] res = new int[len];        int reminder = 0;        for(int i = len - 1; i >= 0; i --) {            if(i == len - 1) {                if(digits[i] == 9) {                    reminder = 1;                    res[i] = 0;                } else                    res[i] = digits[i] + 1;                continue;            }            if(digits[i] < 9) {                res[i] = digits[i] + reminder;                reminder = 0;            }            else {                if(reminder == 1) {                    res[i] = 0;                    reminder = 1;                } else                    res[i] = digits[i] + reminder;            }        }        if(reminder == 1) {            res = new int[len + 1];            res[0] = 1;        }        return res;    }}
108 / 108 test cases passed.Status: AcceptedRuntime: 304 ms
0 0
原创粉丝点击