给出用数字数组表示的一个非负整数,请对该整数加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;
}
}
读题读了半天。。
一次遍历。
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;
} /**
* 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]);
}
}
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;
}
}