一、废话不多说,先来上道题!
1、题目(来自力扣)
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 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
大多数编程语言中,循环语句通常包括for、while、do-while等类型,开发人员需要根据实际需求选择不同的循环结构来完成特定任务。在Python中,循环只有for和while两种形式。
2、题解
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
a = len(digits)#数组的长度
for i in range(a-1,-1,-1): #循环
if digits[i]!=9:
digits[i] += 1
for j in range(i+1,a,1):
digits[j] = 0
return digits
return [1] + [0] * a
大家可以试着理解下每行代码的意思,把代码学会了,再上高度,学算法~本次题目的难度较低,看下下面的题解吧~
当我们对数组(可以暂且理解为有顺序的集合,一个萝卜一个坑,之后我们会详细讲述下)加1时,会发现只有出现9的时候会出现进位,其他数字就是简简单单+1即可。我们可以考虑如下的三种情况:
①如果数组的末尾没有“9”,例如 [1,2,3],那么我们直接将末尾的数加1,得到 [1,2,4] 并返回;
②如果数组的末尾有若干个“9”,例如 [1,2,9,9][1,2,3,9,9],那么我们只需要找出从末尾开始的第一个不为 9 的元素,将该元素加1,得到 [1,3,9,9][1,2,4,9,9]。随后将末尾的9全部置零,得到 [1,3,0,0][1,2,4,0,0] 并返回;
③如果数组的所有元素都是9,例如 [9,9,9,9,9],那么答案为[1,0,0,0,0,0]。我们只需要构造一个长度比 多 1的新数组,将首元素置为1,其余元素置为0即可。
因此对数组进行一次逆序遍历,找出第一个不为9的元素,将其加一并将后续所有元素置零即可。如果所有的元素均为9,那么需要返回一个新的数组。在题解中的代码,我们发现了一个新功能:循环,也就是遍历的工具,接下来我们详细讲述一下。
二、循环(Loop)
1、遍历
先讲下啥是遍历,顾名思义,一遍一遍去经历,通俗来讲,就是机械地访问每一个对象。官方解释:循环可以用来取出列表中的元素,其原理其实就是根据索引自增的方式来一次进行列表中元素的取值,不仅仅是列表,包括字符串、字典、元组等序列都是可以通过循环来进行元素取值,这个过程称为遍历。
2、while循环
i = 0
lst = ['a', 'b', 'c', 'd']
while i < 4:
print(lst[i])
i += 1
print("循环结束")
注意循环条件的范围不要超出列表本身长度,不然会报错,IndexError: list index out of range。
3、for循环
for循环主要是用于迭代序列(列表、元组、字典等)
通过for...in...格式能够遍历如序列中的每一个元素,结构如下:
lst = [1, 2, 3, 3]
for i in lst:
print(i)
如果要通过for循环来制定任意循环次数的话通常是通过range()函数来实现。
range()是Python中一个内置的函数,它用于创建一个指定范围内连续的数字序列。range()函数有3个参数,起始位置start、终止位置stop和步长step,分别表示数字序列的起始位置、结束位置和连续数字之间的跨度。
range(start,stop,step) #stop不包含在内,左闭右开
range()函数需要至少传入一个参数(stop参数),如果只传入stop参数,则默认以0作为起始位置,步长为1。若还传入start参数,则以start为起始位置,步长为1。如果还传入step参数,则步长值为step。range()函数返回值是一个可迭代对象,可以通过循环或转换为列表等方式进行访问。注!传入stop值本身不被访问,可以这样记start闭,stop开。
4、循环中的小语句
break语句
有时候在循环中需要提前终止循环,例如需要找出列表中第一个值为3的元素,找到后进行输出然后终止循环,那么这个思路最关键的就是在循环体中需要判断列表元素是否等于3,如果等于的话就可以终止循环而不再进行之后的循环操作,这个需求就可以通过break语句来实现,代码如下:
a = [0,1,2,3,4,5]
for i in range(5,-1,-1):
if a[i]==2:
break
else:
print(a[i])
continue语句
与break语句不同的是,continue语句是用于跳过本次循环,如下:
a = [0,1,2,3,4,5]
for i in range(5,-1,-1):
if a[i]==2:
continue
else:
print(a[i])
三、嵌套循环
在 Python 中,嵌套循环是由多个循环结构嵌套组成的循环结构。嵌套循环可以用于对多维数据结构(如二维列表)进行遍历、查找和操作的过程中。
在嵌套循环中,外层循环用于控制内层循环的执行次数。具体实现方式可以使用 for 循环嵌套,也可以使用 while 循环嵌套。我们本道题就采取了嵌套循环,
# 嵌套循环遍历二维列表
a = [["元宵节","快乐", "!"], ["吃汤圆","了吗", "?"], ["祝你","天天开心", "!"]]
for i in a: # 外层循环
for j in i: # 内层循环
print(j,end = " ")
print()
四、小小唠叨
今天就不唠叨啥啦,大家好好过节吧,元宵节快乐~不过这个点,大家应该都玩差不多了吧,年过完了,大家收收心哈~一起加油,奔向更光明的未来!!