1. 程式人生 > >LintCode之加一

LintCode之加一

描述 result 進位 images 可能 分析 ber 產生 urn

題目描述:

技術分享圖片

分析:由樣例可以知道,當數組的每一個數字都是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 }

LintCode之加一