【LeetCode每日一题】——66.加一

一【题目类别】

  • 数组

二【题目难度】

  • 简单

三【题目编号】

  • 66.加一

四【题目描述】

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

五【题目示例】

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

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

  • 示例 3:
    输入:digits = [0]
    输出:[1]

六【题目提示】

  • 1 <= digits.length <= 100
  • 0 <= digits[i] <= 9

七【解题思路】

  • 从后向前遍历数组,遇到“9”就变成“0”,表示进位,继续向前遍历,如果遇到不是“9”,此位置数字加一,然后返回即可。最后如果还有进位,新建一个数组,首位是“1”,其余位都是“0”

八【时间频度】

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n为数组长度
  • 空间复杂度: O ( 1 ) O(1) O(1)

九【代码实现】

  1. Java语言版
package Array;

public class p66_PlusOne {

    public static void main(String[] args) {
        int[] digits = {1, 2, 3};
        int[] res = plusOne(digits);
        for (int i = 0; i < res.length; i++) {
            System.out.print(res[i]);
        }
    }

    public static int[] plusOne(int[] digits) {
        int len = digits.length;
        for (int i = len - 1; i >= 0; i--) {
            if (digits[i] == 9) {
                digits[i] = 0;
            } else {
                digits[i]++;
                return digits;
            }
        }
        int[] res = new int[len + 1];
        res[0] = 1;
        return res;
    }

}
  1. C语言版
#include<stdio.h>
#include<stdlib.h>

int* plusOne(int* digits, int digitsSize, int* returnSize)
{
	for (int i = digitsSize - 1; i >= 0; i--)
	{
		if (digits[i] == 9)
		{
			digits[i] = 0;
		}
		else
		{
			digits[i]++;
			*returnSize = digitsSize;
			return digits;
		}
	}
	int* res = (int*)calloc((digitsSize + 1), sizeof(int));
	res[0] = 1;
	*returnSize = digitsSize + 1;
	return res;
}

/*主函数省略*/

十【提交结果】

  1. Java语言版
    请添加图片描述

  2. C语言版
    请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IronmanJay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值