笔试算法题 [1,2,3,4]------>[1,2,3,5]

4 篇文章 0 订阅
2 篇文章 0 订阅

问题来源

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。

示例 2:

输入:digits = [4,3,2,9]
输出:[4,3,3,0]
解释:输入数组表示数字 4329。

示例 3:

输入:digits = [0]
输出:[1]

解题思路
题目的意思就是说,把一个数组的数拼接起来当成一个整数,然后这个整数加一,在把它以数组的形式输出。
分析会出现的情况:
数组的最后下标中元素的值不为9,也就意味着,最后下标元素的值加一就是结果
当数组后面元素连续都是9就需要一直往数组前一个元素加一,直到加到不为9的元素才停止,并且进位后的下标为0.
最特殊的情况,全部都是9,这就意味着原来数组长度不够,需要一个新数组并且是原来数组长度+1,初始化新数组后,在给新数组的第一个下标值赋1,后面元素都默认为0;
例如:
输入:[9,9,9,9]
输出:[1,0,0,0,0]
9999+1=10000

package com.exam1.arithmetic;

import java.util.Arrays;
/**
 * @author: Shen
 * @Date: 2022/10/31 18:45
 * @param:
 * @return:
 * 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
 *
 * 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
 *
 * 你可以假设除了整数 0 之外,这个整数不会以零开头。
 *
 * 示例 1:
 *
 * 输入:digits = [1,2,3]
 * 输出:[1,2,4]
 * 解释:输入数组表示数字 123。
 *
 * 示例 2:
 *
 * 输入:digits = [4,3,2,9]
 * 输出:[4,3,3,0]
 * 解释:输入数组表示数字 4329。
 *
 * 示例 3:
 *
 * 输入:digits = [0]
 * 输出:[1]
*/

public class PlusOne {
    public static void main(String[] args) {
        PlusOne plusOne=new PlusOne();
        int[] a={9,9,9};
        System.out.println(Arrays.toString(a));
        int[] plusone = plusOne.plusone(a);
        System.out.println(Arrays.toString(plusone));
    }
    public int[] plusone(int[] digits) {
        for (int i = digits.length - 1; i >= 0; i--) { //从数组尾部开始
            if (digits[i] != 9) { //当前元素不为9
                digits[i] += 1; //元素加一
                return digits; //返回数组
            } else {
                //为9时,数组就需要扩容,把当前下标的元素赋0,下标i减一,在下一个元素中继续上面的循环,表示进位加1
                int[] temp = new int[digits.length + 1];
                temp[0] = 1;
                return temp;
            }
        }
        return null;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值