一、题目
Given a non-negative integer represented as a non-empty array of digits, plus one to the integer.
You may assume the integer do not contain any leading zero, except the number 0 itself.
The digits are stored such that the most significant digit is at the head of the list.
题意是:给定一个不为NULL的数组来表示一个非负的整数,给整数加一。最高位在数组的头部。
my ugly code,is wrong
//容易溢出
class Solution {
public int[] plusOne(int[] digits) {
int len=digits.length;
long num = 0;
for(int i=0;i<len;i++) {
num+=Math.pow(10, (len-i-1))*digits[i];
}
num++;
StringBuffer str = new StringBuffer ();
while(true) {
str.append(num%10);
num/=10;
if(num==0)
break;
}
StringBuffer reverse = str.reverse();
int resint[]=new int[reverse.length()];
for(int i=0;i<reverse.length();i++) {
resint[i]=reverse.charAt(i)-'0';
}
return resint;
}
}
public int[] plusOne(int[] digits) {
boolean flag = true;
int value = 0;
int len = digits.length;
if(digits[len-1]!=9){
digits[len-1] += 1;
}else{//最后一位为9
for(int i=0;i<digits.length-1;i++)
if(digits[i] != 9)
flag = false;
if(flag){//所有为都为9
digits = new int[digits.length+1];
digits[0] = 1;
return digits;
}else{//不全为9,但最后一位为9
value = 1;//处理最后一位
digits[len-1] = 0;//处理最后一位
for(int i=len-2;i>=0;i--){//处理剩余位置
if(digits[i] == 9 && value == 1){//
digits[i] = 0;
value = 1;
}else{
digits[i] += value;
value = 0;
}
}
}
}
return digits;
}
高咖位代码
public int[] plusOne(int[] digits) {
int value = 1;//最后一个进位为1
int len = digits.length;
for(int i=len-1;i>=0;i--){
int temp =digits[i] + value;
digits[i] = temp % 10;
value = temp / 10;
}
if(value == 1){
digits = new int[len+1];
digits[0] = 1;
}
return digits;
}