507.完美数
题目描述
对于一个 正整数,如果它和除了它自身以外的所有 正因子 之和相等,我们称它为 「完美数」。
给定一个 整数
n
, 如果是完美数,返回true
;否则返回false
。示例 1:
输入:num = 28
输出:true
解释:28 = 1 + 2 + 4 + 7 + 14
1, 2, 4, 7, 和 14 是 28 的所有正因子。
示例 2:
输入:num = 7
输出:false
解题思路
首先求因子想到的是暴力循环,两个列表去遍历,但看到通过率我就知道这题暴力循环肯定会超出时间限制,先试一试:
解题过程
1. def checkPerfectNumber(num): 2. fin_list = [] 3. for i in range(num): 4. for j in range(num+1): 5. if i * j == num: 6. fin_list.append(i) 7. if sum(fin_list) == num: 8. return True 9. else: 10. return False
果然,超出了时间限制,看来得降低时间复杂度。实际上我们只需要判断2-int(math.sqrt(num))+1就可以了,添加的时候也不要用列表添加了,改成数字相加,这样能大大优化时间复杂度。
1. def checkPerfectNumber(num): 2. target = 1 3. # 只需要判断2-sqrt(num)+1 4. if num == 1: 5. return False 6. for i in range(2,int(math.sqrt(num))+1): 7. if num%i == 0: 8. target += i 9. target += num//i 10. if target == num: 11. return True 12. else: 13. return False
509. 斐波那契数
题目描述
斐波那契数 (通常用
F(n)
表示)形成的序列称为 斐波那契数列 。该数列由0
和1
开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1
给定
n
,请计算F(n)
。示例 1:
输入:n = 2
输出:1
解释:F(2) = F(1) + F(0) = 1 + 0 = 1
示例 2:
输入:n = 3
输出:2
解释:F(3) = F(2) + F(1) = 1 + 1 = 2
示例 3:
输入:n = 4
输出:3
解释:F(4) = F(3) + F(2) = 2 + 1 = 3
解题思路
这题就是很典型的斐波那契递归问题,用递归能够很好的解决问题。
解题代码
1. def fib(n): 2. if n == 0: 3. return 0 4. elif n ==1: 5. return 1 6. else: 7. return fib(n-1) + fib(n-2)
520. 检测大写字母
题目描述
我们定义,在以下情况时,单词的大写用法是正确的:
- 全部字母都是大写,比如
"USA"
。- 单词中所有字母都不是大写,比如
"leetcode"
。- 如果单词不只含有一个字母,只有首字母大写, 比如
"Google"
。给你一个字符串
word
。如果大写用法正确,返回true
;否则,返回false
。示例 1:
输入:word = "USA"
输出:true
示例 2:
输入:word = "FlaG"
输出:false
解题思路
将符合要求的情况转化为大写字母,好在python字符串提供了相应的API,直接调用就可以,内存和速度表现的都很不错。
解题代码
1. def detectCapitalUse(word:str): 2. if word.isupper() or word.islower() or word.title() == word: 3. return True 4. else: 5. return False