您的位置:首页 > 其它

leetcode [Plus One]

2017-03-11 21:54 274 查看
public class Solution {
public int[] plusOne(int[] digits) {
int temp[] = new int[digits.length + 1];
int[] res = null;
int carry = 0;
if(digits[digits.length - 1] != 9){
digits[digits.length - 1] += 1;
return digits;
}
else{
carry = (digits[digits.length - 1] + 1) / 10;//先处理要加的末位的1
temp[digits.length] = (digits[digits.length - 1] + 1) % 10;

for(int i = digits.length - 2; i >= 0; i--){
//carry = (digits[i] + carry) / 10;//不是每一位都加1
temp[i + 1] = (digits[i] + carry) % 10;
carry = (digits[i] + carry) / 10;//不是每一位都加1 注意放的位置,如果放在前面carry的值已经被改变了
}
if(carry != 0){
temp[0] = carry;
res = temp;
}
else{
res = new int[digits.length];
for(int i = 0; i < temp.length - 1; i++){
res[i] = temp[i + 1];
}
}
}
return res;
}
}

代码简洁,对于末尾为9的速度会慢一些(相同思路):

class Solution {
public int[] plusOne(int[] digits) {
int temp[] = new int[digits.length + 1];
int[] res = null;
int carry = 0;
/*if(digits[digits.length - 1] != 9){
digits[digits.length - 1] += 1;
return digits;
}*/

//注释部分其实在下面也有体现,重复了,但有了注释部分对于末尾为9的速度会快很多

carry = (digits[digits.length - 1] + 1) / 10;//先处理要加的末位的1
temp[digits.length] = (digits[digits.length - 1] + 1) % 10;

for(int i = digits.length - 2; i >= 0; i--){
//carry = (digits[i] + carry) / 10;//不是每一位都加1
temp[i + 1] = (digits[i] + carry) % 10;
carry = (digits[i] + carry) / 10;//不是每一位都加1 注意放的位置,如果放在前面carry的值已经被改变了
}
if(carry != 0){
temp[0] = carry;
res = temp;
}
else{
res = new int[digits.length];
for(int i = 0; i < temp.length - 1; i++){
res[i] = temp[i + 1];
}
}
return res;
}
}

最优解:
class Solution {
public int[] plusOne(int[] digits) {
//由于本题只加了一个一位数1,所以不用去找carry来每一位往上加,只用观察每一位即可
//其实是一种思路,但是代码优化了许多
int n = digits.length;
for(int i = n - 1; i >= 0; i--) {
if(digits[i] < 9) {
digits[i]++;
return digits;//发现有一位不为9把该位加1后就行,由于没有进位,高位也不用变了,直接返回
}
else digits[i] = 0;//某一位为9则要将该位变为0,而且在上面那个if中不只是判断末位是否为9(代替了carry的作用)
}
//此时已经运行到了for循环外,说明在for循环内没有return,则最高位有进位
int[] newNumber = new int [n+1];
newNumber[0] = 1;

return newNumber;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: