/* * @lc app=leetcode.cn id=66 lang=c * * [66] 加一 * * https://leetcode-cn.com/problems/plus-one/description/ * * algorithms * Easy (37.65%) * Total Accepted: 39.4K * Total Submissions: 104.7K * Testcase Example: '[1,2,3]' * * 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 * * 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。 * * 你可以假设除了整数 0 之外,这个整数不会以零开头。 * * 示例 1: * * 输入: [1,2,3] * 输出: [1,2,4] * 解释: 输入数组表示数字 123。 * * * 示例 2: * * 输入: [4,3,2,1] * 输出: [4,3,2,2] * 解释: 输入数组表示数字 4321。 * * */ /** * Return an array of size *returnSize. * Note: The returned array must be malloced, assume caller calls free(). */ int* plusOne(int* digits, int digitsSize, int* returnSize) { int len = digitsSize; int flag = 1; int bak_array[digitsSize + 1]; int * array; /* 进位实现 */ for(int i = digitsSize - 1; i >= 0; i--) { if(digits[i] + flag > 9) { if(i == 0) { bak_array[i] = 1; bak_array[digitsSize] = 0; len = digitsSize + 1; } else { bak_array[i] = 0; } flag = 1; } else { bak_array[i] = digits[i] + flag; flag = 0; } } /* 为数组分配空间 */ array = (int *)malloc(sizeof(int) * len); /* 返回数组大小赋值 */ *returnSize = len; /* 将数据拷贝到动态分配的数组 */ memcpy(array, bak_array, sizeof(int) * len); return array; }
这里要考虑999这样的,需要再多一位,考虑1999这样的,或者111这种普通的。
然后if判断,仔细一点就很简单。最后统计新数组的长度(如果首位不进位的话就和原数组长度一样,否则多一位)
返回整个数组(这里用到一个memcpy函数,直接复制了,也可以建立个循环,自己挨个赋值拷贝过去)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
python:
# # @lc app=leetcode.cn id=66 lang=python3 # # [66] 加一 # # https://leetcode-cn.com/problems/plus-one/description/ # # algorithms # Easy (37.65%) # Total Accepted: 39.4K # Total Submissions: 104.7K # Testcase Example: '[1,2,3]' # # 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 # # 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。 # # 你可以假设除了整数 0 之外,这个整数不会以零开头。 # # 示例 1: # # 输入: [1,2,3] # 输出: [1,2,4] # 解释: 输入数组表示数字 123。 # # # 示例 2: # # 输入: [4,3,2,1] # 输出: [4,3,2,2] # 解释: 输入数组表示数字 4321。 # # # class Solution: def plusOne(self, digits: List[int]) -> List[int]: num=0 for i in range(len(digits)): num =num*10+digits[i] num+=1 strnum = str(num) res = [] for i in range(len(strnum)): res.append(int(strnum[i])) return res
用python就走歪门邪道了。。把数组中的数取出来 然后把数加1,变成字符,然后遍历字符串挨个塞进列表中,最后返回列表即可。