Leecode刷题之旅-C语言/python-66加一

/*
 * @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,变成字符,然后遍历字符串挨个塞进列表中,最后返回列表即可。

原文地址:https://www.cnblogs.com/lixiaoyao123/p/10509937.html