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 }