加一
python解法
先转为实数,然后加一,最后转为list输出。
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
#先转为实数
num=int("".join([str(_) for _ in digits]))+1
#转为list
return [int(_) for _ in str(num)]
c++解法
/**
我的解法:比较蠢,硬做,没有技巧,将每种情况分开讨论。耗时0ms。
*/
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int len=digits.size();
vector<int> ans;
//全9的情况,数组第一个元素变为1,然后跟len个0
bool is9=true;
for(auto i:digits){
if(i!=9){
is9=false;
break;
}
}
if(is9){
ans.push_back(1);
for(int i=0;i<len;i++) ans.push_back(0);
return ans;
}
//全0的情况,最后一个元素变为1
bool is0=true;
for(auto i:digits){
if(i!=0){
is0=false;
break;
}
}
if(is9){
for(int i=0;i<len-1;i++) ans.push_back(0);
ans.push_back(1);
return ans;
}
//普通情况,十进制
int jin=1;//进位初始化为1
for(int i=len-1;i>=0;i--){
int x=digits[i]+jin;
digits[i]=x%10;
jin=x/10;
}
return digits;
}
};
/**
参考解法:比较巧妙,直接判断当前元素是不是9,是9的话就变为0,不是的话加一就返回结束就OK,如果全为9,最后在前面插入一个1即可。耗时4ms。
*/
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int len=digits.size();
for(int i=len-1;i>=0;i--){
if(digits[i]!=9){
digits[i]++;
return digits;
}
digits[i]=0;
}
digits.insert(digits.begin(),1);//如果都是9,就在开头插入一个1
return digits;
}
};
java解法
class Solution {
public int[] plusOne(int[] digits) {
int len=digits.length;
for(int i=len-1;i>=0;i--){
if(digits[i]!=9){
digits[i]++;
return digits;
}else digits[i]=0;
}
//运行到这说明全部为9,则在最前面加一,可以新建一个数组
int res[] =new int[len+1];
res[0]=1;
return res;
}
}