每日力扣——加一

129 阅读2分钟

「这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战

前言

一个程序,有一种书本上的描述:解决一个问题除了要有一个数据结构来表示和组织信息外,还需要一系列步骤来完成问题的解决方案。

当然了,第一个逗号前面的那当然就是数据结构了,那后面的一系列步骤其实说的就是算法。

也可以称为:操作数据结构的方法;或者称为:解决问题的方案

我学算法的目的

因为我想在找工作的时候更有竞争力,更有话语权,所以我来学算法!

一、题目描述

题目描述:给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1: \color{red}{} 输入:digits = [1,2,3] 输出:[1,2,4] 解释:输入数组表示数字 123。 示例 2: \color{red}{} 输入:digits = [4,3,2,1] 输出:[4,3,2,2] 解释:输入数组表示数字 4321。 示例 3: \color{red}{} 输入:digits = [0] 输出:[1]

提示: \color{red}{} 1 <= digits.length <= 100 0 <= digits[i] <= 9

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/pl… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、题目解析

第一思路:

一个整数数组,表示一个整数 通过遍历数组的方法将数组累加为整数再加一 结果:运行超时

第二思路:

从后遍历数组,判断每个元素 如果小于9,就让最后元素+1并返回数组 如果=9,+1的话会变成10 那么让9变成0 前一个元素在下一个循环的时候会处理 如果循环正常,说明数组元素全为9 那么新建一个数组,长度为原数组长度+1,令第一个元素为1 其他元素默认为0

需要注意的是,数组题需要判断当数组为空,数组长度为1的时候的特殊情况

三、代码

python

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        n=len(digits)
        m=n
        if not digits: return None
        if n==1 and digits[0]!=9:
            digits[0]+=1 
            return digits
        while n-1>=0:
            if digits[n-1]!=9:
                digits[n-1]+=1 
                return digits
            else: digits[n-1]=0
            n-=1
        digits=[0]*(m+1)
        print(digits)
        digits[0]=1
        print(digits)
        return digits

结语

算法的出现也是因为有了问题,之前也说过算法是什么了,就是一个问题的解决方案,所以我们的算法是为了解决问题才出现的。

当然,主要还是为了money,刷算法,冲大厂,加油。

成功不难,就在于你是否会比别人更会吃苦。