给出用数字数组表示的一个非负整数,请对该整数加1。
//题目还是小伙伴解释才看懂。。。输入的数组digits表示一个大整数,每个表示一位。 class Solution { public: vector<int> plusOne(vector<int> &digits) { const int num = 1; //待加数 int carry = num; //进位 for (int i = digits.size() - 1; i >= 0; i--) { digits[i] += carry; carry = digits[i] / 10; digits[i] %= 10; } if (carry > 0) digits.insert(digits.begin(),1); return digits; } };
import java.math.BigDecimal; public class Solution { public int[] plusOne(int[] digits) { String s = ""; for (int i:digits){ s += i; } s = new BigDecimal(s).add(BigDecimal.valueOf(1)).toString(); int[] res = new int[s.length()]; for (int i = 0; i < s.length(); i ++ ) { res[i] = s.charAt(i) - '0'; } return res; } }
/**
* 66. Plus One
* 加一
* 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
* @author shijiacheng
*
*/
public class Solution {
public int[] plusOne(int[] digits) {
int n = digits.length;
for(int i = n-1;i>=0;i--) {
if(digits[i] < 9) {
digits[i]++;
return digits;
}
digits[i] = 0;
}
int[] newDigits = new int[n+1];
newDigits[0] = 1;
return newDigits;
}
public static void main(String[] args) {
Solution s = new Solution();
int[] digits = {9};
int[] newDigits = s.plusOne(digits);
System.out.println(newDigits[0]);
}
}
读题读了半天。。
一次遍历。
class Solution {
public:
vector<int> plusOne(vector<int> &digits) {
if(digits.size()==0)
return digits;
int i=digits.size();
int c=1;
vector<int>res;
while(i){
if(c+digits[i-1]>9){
res.push_back(0);
c=1;
}
else{
res.push_back(digits[i-1]+c);
c=0;
}
i--;
}
if(c)
res.push_back(c);
reverse(res.begin(),res.end());
return res;
}
};
/* * 一个数以数组形式给你,加1后以数组形式返回,最低位开始按位相加即可,temp保存进位信息。 */ public int[] plusOne(int[] digits) { int temp=1; for(int i=digits.length-1;i>=0;i--) { int num = digits[i]; digits[i] =(num+temp)%10; temp = (num+temp)/10; } if(temp==1) { int[] array=new int[digits.length+1]; array[0]=1; return array; }else { return digits; } }
public class Solution { public int[] plusOne(int[] digits) { int len = digits.length; int[] res = new int[len]; int c = 0; digits[len-1] = digits[len-1]+1; for(int i=len-1;i>=0;i--) { int temp = digits[i]+c; res[i] = temp%10; c = temp/10; } if(c!=0) { int[] newRes = new int[len+1]; newRes[0] = c; for(int i=1;i<len+1;i++) { newRes[i] = res[i-1]; } return newRes; } return res; } }
class Solution { public: vector<int> plusOne(vector<int> &digits) { vector<int> num = digits; int n = digits.size(); int C = 0; num[n-1] += 1; for(int i=n-1;i>=0;i--) { num[i] += C + 1; if(num[i] > 9) { C = 1; num[i] = num[i]%10; }else{ C = 0; } } if(C == 1) num.insert(num.begin(),1); return num; } };
#include<algorithm> class Solution { public: vector<int> plusOne(vector<int> &digits) { int add = 1;//进位值 vector<int> res; for (int i = digits.size()-1; i >=0 ; i--){ res.push_back((add + digits[i]) % 10); add = (add + digits[i]) / 10; } if (add){ res.push_back(add); } reverse(res.begin(), res.end()); return res; } };
class Solution { public: vector<int> plusOne(vector<int> &digits) { int i = digits.size() - 1; // 末尾9全部置0 while(i >= 0 && digits[i] == 9) { digits[i] = 0; --i; } // 是否为全9数字 if(i >= 0) ++digits[i]; else { // 头部insert效率不高,改成首部改0,尾部再加一个0 digits.push_back(0); digits[0] = 1; } return digits; } };
//1.不需要flag! 从右向左,遇到9就变0,非9就加1,然后break; //2.digits[0]如果等于0,说明长度增加了1,则新建数组,首位为1,其他位为0; public int[] plusOne(int[] digits) { for (int i = digits.length-1; i >= 0 ; i--) { if (digits[i] == 9)digits[i] = 0; else { digits[i] = digits[i]+1; break; } } if (digits[0] == 0){ int[] arr = new int[digits.length+1]; arr[0] = 1; for (int i = 1; i < arr.length; i++) arr[i] = 0; return arr; } return digits; }
import java.util.*; import java.math.*; public class Solution { public int[] plusOne (int[] digits) { // write code here String s = ""; for(int i=0;i<digits.length;i++){ s += digits[i]; } BigInteger a = new BigInteger(s); BigInteger num = a.add(BigInteger.valueOf(1)); String t = ""+num; int []result = new int[t.length()]; for(int i=0;i<t.length();i++){ result[i] = t.charAt(i)-'0'; } return result; } }
class Solution { public: /** * * @param digits int整型vector * @return int整型vector */ vector<int> plusOne(vector<int>& digits) { // write code here //将一个数组表示的大数加一,[1,2,3]表示123 const int num=1; //待加数 int carry=num; //进位 for(int i=digits.size()-1;i>=0;i--){ digits[i]+=carry; carry=digits[i]/10; digits[i]%=10; } if(carry>0){ digits.insert(digits.begin(), 1); } return digits; } };
class Solution { public: /** * * @param digits int整型vector * @return int整型vector */ vector<int> plusOne(vector<int>& digits) { // write code here // reverse(digits.begin(),digits.end()); vector<int> res(digits.rbegin(),digits.rend()); int t=1; for(int i=0;i<res.size();++i) { t = res[i]+t; if(t<=9) { res[i] = t; t = 0; break; }else { //t>10 res[i] = t%10; t/=10; } } if(t) res.push_back(1); reverse(res.begin(),res.end()); return res; } };
import java.util.*; public class Solution { public int[] plusOne (int[] digits) { int len=digits.length; int carry=0; for(int i=len-1;i>=0;){ if(digits[i]<9){ digits[i]+=1; return digits; }else{ if(i==0){ break; } digits[i]=0; i--; } } String str=""; for(int i=0;i<len;i++){ str+="0"; } str=1+str; int[] res=new int[str.length()]; for(int i=0;i<str.length();i++){ res[i]=str.charAt(i)-'0'; } return res; } }