[LeetCode] Plus One

题目链接: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)数字的头部能否包含0(例如 [0,0,1])?

 

解题思路:

从低位向高位递归,存在如下两种情况

1)若第i位的数 + 1 <= 9,完成加法后直接返回

2)若第i位的数 + 1 = 10(即若第i位的数为9),完成加法后第i位为0,循环到第i-1位

 1   public int[] plusOne(int[] digits) {
 2         int[] result = new int[digits.length + 1];
 3         for(int i = digits.length - 1; i >= 0; i--){
 4             int digit = digits[i];
 5             if(digit < 9){
 6                 digits[i]++;
 7                 return digits;
 8             }else{
 9                 digits[i] = 0;
10                 result[i+1] = digits[i];
11             }
12         }
13         result[0] = 1;
14         return result;
15     }

时间复杂度:O(n) ,空间复杂度:O(n)

 

扩展:可以用List替代数组操作

 1      public void plusOneList(List<Integer> digits) {
 2         for(int i = digits.size() - 1; i >= 0; i--){
 3             int digit = digits.get(i);
 4             if(digit < 9){
 5                 digits.set(i, digit + 1);
 6                 return;
 7             }else{
 8                 digits.set(i, 0);
 9             }    
10         }
11         digits.add(0);
12         digits.set(0, 1);        
13     }

时间复杂度:O(n) ,空间复杂度:O(1)

 

posted @ 2016-08-18 10:54  沫沫_fun  阅读(107)  评论(4)    收藏  举报