258. 各位相加
题目描述
给定一个非负整数
num
,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。示例 1:
输入: num =38
输出: 2
解释: 各位相加的过程为:
38 --> 3 + 8 --> 11
11 --> 1 + 1 --> 2
由于 2
是一位数,所以返回 2。
示例 2:
输入: num =0
输出: 0
解题思路
这是一个很经典的题目了,每个位置相加,那么用字符串切割可以做到,避免了复杂的数学计算,重复这个过程用while循环,结束循环的条件即使各个位数上的数字相加结果为一位数。一次通过!
解题代码
1. def addDigits(num): 2. while True: 3. all = 0 4. for i in str(num): 5. all+=int(i) 6. num = all 7. if all <10: 8. break 9. 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的时候,要单独判断一下,否则会超时错误!
解题代码
1. def isUgly(n): 2. num_list = [2,3,5] 3. while True: 4. if n == 1: 5. return True 6. if n == 0: 7. return False 8. else: 9. if n % num_list[0] == 0: 10. n = n/ num_list[0] 11. elif n %num_list[1]==0: 12. n = n/ num_list[1] 13. elif n %num_list[2] == 0: 14. n = n/ num_list[2] 15. else: 16. 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 中。
解题思路
找缺失的数字,只要用列表长度生成一个新列表,再用这两个列表做差就可以了,做差我采用的是列表推导式的方法,一次通过!
解题代码
1. def missingNumber(nums): 2. length = len(nums) 3. nums_list = [i for i in range(length+1)] 4. target = [i for i in nums_list if i not in nums] 5. return target[0]