首页 > 试题广场 >

给数组加一

[编程题]给数组加一
  • 热度指数:2176 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个用数组表示的数字,即数组中每个数表示一个数位上的数,例如 [1,2,3],表示 123 ,请问给这个数字加一后得到的结果(结果同样以数组的形式返回)。

注意:数组中不可能出现负数,且保证数组的首位即数字的首位不可能是 0 。

数据范围: 数组长度满足 ,数组中每个数满足
示例1

输入

[1,2,3]

输出

[1,2,4]
示例2

输入

[1,9]

输出

[2,0]
示例3

输入

[9]

输出

[1,0]
和两个链表的加法差不多,倒序遍历数组,从低位往高位加。先把结果存到一个双端链表中,再将结果倒入到一个数组中返回。
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型一维数组 
     * @return int整型一维数组
     */
    public int[] plusOne (int[] nums) {
        // write code here
        LinkedList<Integer> list = new LinkedList<>();
        int carry = 0;
        for(int i = nums.length - 1; i >= 0; i--){
            int sum = carry + (i == nums.length - 1? 1: 0) + nums[i];
            list.add(sum % 10);
            carry = sum / 10;
        }
        if(carry > 0) list.add(carry);
        int[] res = new int[list.size()];
        int p = 0;
        while(!list.isEmpty()){
            res[p++] = list.removeLast();
        }
        return res;
    }
}

发表于 2021-12-13 11:21:57 回复(0)
#include<stdio.h>
//#include <cmath>
int func(int arr[],int n){
    int i=0;
    int add=0;
    int new=0;
    for(i=0;i<n;i++){
        new = (int) (arr[i]*pow(10,n-i-1));
        add+=new;
    
    //如果要进行幂运算,需要使用pow函数,例如: int p = pow(10, 3);
    printf("%d",add);
    add++;
    for(i=0;i<n;i++){
        //在C语言中,pow函数的返回值是一个浮点数,如果要将其转换为整型,需要使用类型转换。
        //例如:int p = (int)pow(10, 3)。
        arr[i]=(int)(add/pow(10,n-i-1))%10;
    }
    /*
    int num = 0;
    for(int i = 0; i < n; i++){
        num = num * 10 + arr[i];
    }
    
    num++;
    */
    for(i=0;i<n;i++){
        printf("%d ",arr[i]);
    
    return 0;
}
int main(){
    int n;
    printf("输入数组的长度");
    scanf("%d",&n); 
    int arr[n];
    printf("输入数组的元素:");
    int i=0;
    for(i=0;i<n;i++){
        scanf("%d",&arr[i]);
    
    for(i=0;i<n;i++){
        printf("%d ",arr[i]);
    
    func(arr,n);
    return 0;
}
编辑于 2024-03-07 22:57:37 回复(0)
package main
import _"fmt"

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums int整型一维数组 
 * @return int整型一维数组
*/
func plusOne( nums []int ) []int {
    carry:=1
    for i:=len(nums)-1;i>=0;i--{
        carry+=nums[i]
        if carry!=10{
            nums[i]=carry
            carry=0
            break
        }else{
            nums[i]=0
            carry=1
        }
    }
    if carry==1{
        nums=append([]int{1},nums...)
    }
    return nums
}

发表于 2023-03-08 20:02:27 回复(0)
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return int整型vector
     */
    vector<int> plusOne(vector<int>& nums) {
        // write code here
        int c = 1;
        for(int i=nums.size()-1; i>=0; i--)
        {
            int val = c + nums[i];
            nums[i] = val % 10;
            c = val / 10;
        }
        if(c==0)
            return nums;
        vector<int> res;
        res.push_back(c);
        for(int i=0; i<nums.size(); i++)
            res.push_back(nums[i]);
        return res;
    }
};

发表于 2022-08-22 10:35:35 回复(0)
    vector<int> plusOne(vector<int>& nums) {
        // write code here
        int res=1;
        for(int i=nums.size()-1;i>=0;i--)
        {
            nums[i]+=res;
            res=nums[i]/10;
            nums[i]%=10;          
        }
        if(res==1)
        {
            nums.insert(nums.begin(), 1);
        }
        return nums;
    }

发表于 2022-06-22 13:58:56 回复(0)
public int[] plusOne (int[] nums) {
        int i=nums.length-1;
        while(i>=0){
            if(nums[i]==9){
                nums[i]=0;
                i--;
            }else{
                nums[i]++;
                break;
            }
        }
        int[] n=new int[nums.length+1];
        if(nums[0]==0){
            n[0]=1;
            for(int j=1;j<nums.length+1;j++){
                n[j]=nums[j-1];
            }
            return n;
        }
        return nums;
    }

发表于 2022-05-30 12:43:56 回复(0)
import java.util.*;
import java.math.BigDecimal;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型一维数组 
     * @return int整型一维数组
     */
    public int[] plusOne (int[] nums) {
        // write code here
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < nums.length; i++) {
            builder.append(nums[i]);
        }
        BigDecimal add = new BigDecimal(builder.toString()).add(new BigDecimal("1"));
        char[] chars = new String(add.toString()).toCharArray();
        int[] temp = new int[chars.length];
        for (int i = 0; i < chars.length; i++) {
            temp[i] = Integer.parseInt(String.valueOf(chars[i]));
        }
        return temp;
    }

发表于 2022-05-23 21:38:53 回复(0)
class Solution:
    def plusOne(self , nums: List[int]) -> List[int]:
        # write code here
        n = int(''.join(map(str,nums)))+1
        return [int(d) for d in str(n)]

发表于 2022-04-25 16:25:32 回复(0)
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#

# @param nums int整型一维数组 
# @return int整型一维数组
#
class Solution:
    def plusOne(self , nums: List[int]) -> List[int]:
        # write code here
        nums[-1] += 1 #末位+1
        add = 0 #进位标识
        for i in reversed(range(len(nums))): #反着遍历每一个元素看看有没有进位, 有就下一位+1
            nums[i] += add
            if nums[i] >= 10:
                nums[i] -= 10
                add = 1
            else:
                add = 0
        if add == 1:#999999 + 1的情况
            nums.insert(0, 1) #在最前面加一位,填充1
        return nums
发表于 2022-04-07 19:07:02 回复(0)
import java.util.*;

public class Solution {
    public int[] plusOne (int[] nums) {
        ArrayList<Integer> list = new ArrayList<>();
        int carry = 0, idx = nums.length-1, sum = 0;
        while (idx >= 0) {
            sum = 0;
            if (idx == nums.length-1) sum += 1;
            sum += nums[idx--] + carry;
            carry = sum / 10;
            list.add(sum % 10);
        }
        if (carry > 0) list.add(carry);
        int[] res = new int[list.size()];
        for (int i = list.size()-1; i >= 0; i--) {
            res[list.size()-i-1] = list.get(i);
        }
        return res;
    }
}

发表于 2022-01-22 12:19:56 回复(0)
public int[] plusOne (int[] nums) {
         int val=1;
		 int[] arr=new int[nums.length+1];
		 for(int i=nums.length-1;i>=0;i--) {
			 int tmp=nums[i]+val;
             arr[i+1]=tmp%10;
             val=tmp/10;
		 }
		 if(val==1) {
			 arr[0]=1;
			 return arr;
		 }else {
			 return Arrays.copyOfRange(arr, 1, arr.length);
		 }
    }

发表于 2022-01-02 20:20:43 回复(0)
class Solution {
public:
    vector<int> plusOne(vector<int>& nums) {
        // write code here
        int n=nums.size();
        nums[n-1]+=1;
        if(nums[n-1]==10)
        {
            int t=0;
            for(int i=n-1;i>=0;i--)
            {
                t+=nums[i];
                nums[i]=t%10;
                t/=10;
            }
            if(nums[0]==0)
                nums.insert(nums.begin(),1,1);
        }
        return nums;
    }
};
发表于 2021-12-22 06:27:43 回复(0)
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums int整型一维数组 
 * @return int整型一维数组
 */
function plusOne( nums ) {
    // write code here
//     let n = nums.join('');
//     let s = BigInt(n)+BigInt("1");
//     //console.log(n,s);
//     return s.toString().split('');
    return (BigInt(nums.join(''))+BigInt("1")).toString().split('');;
}
module.exports = {
    plusOne : plusOne
};

发表于 2021-11-15 15:39:09 回复(0)