本专栏主要记录力扣的刷题记录,备战蓝桥杯,供复盘和优化算法使用,也希望给大家带来帮助,博主是算法小白,希望各位大佬不要见笑,今天要分享的是——《258. 各位相加、263.丑数、268.丢失的数字》。
目录
258. 各位相加
题目描述
解题思路
解题代码
263.丑数
题目描述
解题思路
解题代码
268.丢失的数字
题目描述
解题思路
解题代码
258. 各位相加
题目描述
给定一个非负整数
num
,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。示例 1:
输入: num =38
输出: 2 解释: 各位相加的过程为: 38 --> 3 + 8 --> 11 11 --> 1 + 1 --> 2 由于2
是一位数,所以返回 2。示例 2:
输入: num = 0 输出: 0
解题思路
这是一个很经典的题目了,每个位置相加,那么用字符串切割可以做到,避免了复杂的数学计算,重复这个过程用while循环,结束循环的条件即使各个位数上的数字相加结果为一位数。一次通过!
解题代码
def addDigits(num):
while True:
all = 0
for i in str(num):
all+=int(i)
num = all
if all <10:
break
return all
263.丑数
题目描述
丑数 就是只包含质因数
2
、3
和5
的正整数。给你一个整数
n
,请你判断n
是否为 丑数 。如果是,返回true
;否则,返回false
。示例 1:
输入:n = 6 输出:true 解释:6 = 2 × 3示例 2:
输入:n = 1 输出:true 解释:1 没有质因数,因此它的全部质因数是 {2, 3, 5} 的空集。习惯上将其视作第一个丑数。示例 3:
输入:n = 14 输出:false 解释:14 不是丑数,因为它包含了另外一个质因数7
。
解题思路
题目说丑数就是只包含因数235的正整数,所有,定义一个列表只含有235,如果给的数能除尽其中的某一个,说明这个是他的因子,更新给定数,直到它最终变成1,说明他的因数只有235,如果在某一次三个数字都不匹配的话,说明它有其他因数,那么返回False。特别要注意的是,n=0的时候,要单独判断一下,否则会超时错误!
解题代码
def isUgly(n):
num_list = [2,3,5]
while True:
if n == 1:
return True
if n == 0:
return False
else:
if n % num_list[0] == 0:
n = n/ num_list[0]
elif n %num_list[1]==0:
n = n/ num_list[1]
elif n %num_list[2] == 0:
n = n/ num_list[2]
else:
return False
268.丢失的数字
题目描述
给定一个包含
[0, n]
中n
个数的数组nums
,找出[0, n]
这个范围内没有出现在数组中的那个数。示例 1:
输入:nums = [3,0,1] 输出:2 解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。示例 2:
输入:nums = [0,1] 输出:2 解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。2 是丢失的数字,因为它没有出现在 nums 中。示例 3:
输入:nums = [9,6,4,2,3,5,7,0,1] 输出:8 解释:n = 9,因为有 9 个数字,所以所有的数字都在范围 [0,9] 内。8 是丢失的数字,因为它没有出现在 nums 中。
解题思路
找缺失的数字,只要用列表长度生成一个新列表,再用这两个列表做差就可以了,做差我采用的是列表推导式的方法,一次通过!
解题代码
def missingNumber(nums):
length = len(nums)
nums_list = [i for i in range(length+1)]
target = [i for i in nums_list if i not in nums]
return target[0]