首页 > 试题广场 >

给数组加一

[编程题]给数组加一
  • 热度指数:2182 时间限制: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]
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)
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)
和两个链表的加法差不多,倒序遍历数组,从低位往高位加。先把结果存到一个双端链表中,再将结果倒入到一个数组中返回。
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)