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.
Solution1
public class Solution {
public int[] plusOne(int[] digits) {
int[] result = new int[digits.length];
int ci = 1;
for(int i=digits.length-1;i>=0;i--){
result[i] = digits[i]+ci;
ci = result[i]/10;
result[i] %= 10;
}
if(ci==1){
result = new int[digits.length+1];
result[0] = 1;
}
return result;
}
}
Solution2
- 如果原始输入数组可以改变的话, 可以直接利用原始数组
public class Solution {
public int[] plusOne(int[] digits) {
int ci = 1;
for(int i=digits.length-1;i>=0;i--){
digits[i] += ci;
ci = digits[i]/10;
digits[i] %= 10;
}
if(ci==1){
digits = new int[digits.length+1];
digits[0] = 1;
}
return digits;
}
}
Solution3
- 利用原始输入数组的话,可以提前退出。
public class Solution {
public int[] plusOne(int[] digits) {
int ci = 1;
for(int i=digits.length-1;i>=0&&ci>0;i--){//当ci=0时便可以提前退出了
digits[i] += ci;
ci = digits[i]/10;
digits[i] %= 10;
}
if(ci==1){
digits = new int[digits.length+1];
digits[0] = 1;
}
return digits;
}
}
Solution4
- 下面是一个绝妙的方法,诸君请看:
public class Solution {
public int[] plusOne(int[] digits) {
for(int i=digits.length-1;i>=0;i--){
if(digits[i]==9) digits[i] = 0;
else{
digits[i]++;
return digits;//表明不需要再加了,直接返回即可
}
}
digits = new int[digits.length+1];
digits[0] = 1;//如果能正常退出for循环,表明原数组全是9
return digits;
}
}
- 当然还可以用递归的方法,但是比上面的都要复杂了, 没必要。