LintCode之加一

题目描述:

 

分析:由样例可以知道,当数组的每一个数字都是9时,加一会产生一个最高位的数字1,所以先判断这个数组的每一位是否都是9,如果是,那么新数组的大小是原数组大小加一,否则新数组的大小等于原数组的大小。数字加一,其实也就是数组的最后一个数字加一,但是加一的时候可能会产生进位(9+1=10:就产生了向前一位的进位),用一个数字k表示向前一位的进位(k=1:向前产生了进位,k=0:没有产生进位)由此加到原数组的第一个数字为止,如果最高位也就是原数组的第一位也产生了进位,那么将新数组的第一位置为1。

代码:

 1 public class Solution {
 2     /*
 3      * @param digits: a number represented as an array of digits
 4      * @return: the result
 5      */
 6     public int[] plusOne(int[] digits) {
 7         // write your code here
 8         if(digits.length == 0 || digits == null) {
 9             return null;
10         }
11         int[] num = null;
12         
13         int i;
14         //判断数组的每位数字是否都是9
15         for(i=0; i<digits.length; i++) {
16             if(digits[i] != 9) {
17                 break;
18             }
19         }
20         if(i == digits.length) {
21             num = new int[digits.length+1];
22         }else {
23            num = new int[digits.length];
24         }
25 
26         int n = num.length-1;
27         //k表示低位向高位的进位
28         int k = 1;
29         for(int j=digits.length-1; j>=0; j--) {
30             num[n--] = (digits[j]+k)%10;
31             k = (digits[j]+k)/10;
32         }
33         if(k == 1) {
34             num[n] = k;
35         }
36         
37        
38         
39         return num;
40     }
41 }

 

posted @ 2017-11-26 11:13  zwt3  阅读(136)  评论(0编辑  收藏  举报