【力扣】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

解题思路

  • C
int* plusOne(int* digits, int digitsSize, int* returnSize) {
    int num = 1;    //定义“进位变量”

    for (int i = digitsSize - 1; i >= 0; i--) 
    {
        digits[i] = digits[i] + num;    // 从最后一位开始加“进位变量”
        num = digits[i] / 10;           // 如果进位了,更新“进位变量”
        digits[i] = digits[i] % 10;     // 更新加“进位变量”后的数字
    }

    *returnSize = digitsSize + num;     // 如果还有进位,num 为 1,没有则为 0

    int* sum = (int*)malloc(sizeof(int) * *returnSize); // 申请内存

    memset(sum, 0, sizeof(int) * *returnSize);  // 内存清零

    for (int j = digitsSize - 1; j >= 0; j--) 
    {
        sum[j + num] = digits[j];               // 拷贝数据
    }
    sum[0] += num;  // 添加进位

    return sum;
}
相关文章
|
1月前
|
存储 C++
LeetCode(加一)
对LeetCode上的“加一”问题,提供了C++的解决方案,并讨论了不同情况下的加法操作,包括无进位、有进位以及最高位需要进位的情况。
43 2
|
6月前
|
存储 算法 索引
【力扣刷题】只出现一次的数字、多数元素、环形链表 II、两数相加
【力扣刷题】只出现一次的数字、多数元素、环形链表 II、两数相加
51 1
|
6月前
|
存储
leetcode-66:加一
leetcode-66:加一
23 0
|
6月前
|
存储
LeetCode 66. 加一
LeetCode 66. 加一
36 0
leetcode:66. 加一
函数原型: int* plusOne(int* digits, int digitsSize, int* returnSize) 注:digits是输入的数组,digitsSize是输入数组的大小,returnSize是输出数组的大小
45 0
|
Java Python
leetcode:66.加一
如果数组中的元素都是9的话,那么原数组就需要扩容一位,否则直接在原基础上修改值即可。
48 0
|
存储 算法
Leetcode——66. 加一
Leetcode——66. 加一
|
存储 算法
【力扣】加一 这是一道让人容易马失前蹄的算法题
【力扣】加一 这是一道让人容易马失前蹄的算法题
【力扣】加一 这是一道让人容易马失前蹄的算法题
|
存储 算法 Java
力扣LeetCode初级算法(加一,移动零)(二)
力扣LeetCode初级算法(加一,移动零)
106 0
力扣LeetCode初级算法(加一,移动零)(二)