231. 2 的幂
题目描述
给你一个整数
n
,请你判断该整数是否是 2 的幂次方。如果是,返回true
;否则,返回false
。如果存在一个整数
x
使得n == 2x
,则认为n
是 2 的幂次方。示例 1:
输入:n = 1
输出:true
解释:20 = 1
示例 2:
输入:n = 16
输出:true
解释:24 = 16
解题思路
直接暴力循环就可以了,用2的幂次进行匹配,匹配到了就返回True,循环结束还没匹配到,那么返回False。
解题代码
1. def isPowerOfTwo(n: int): 2. for i in range(0,32): 3. if 2**i == n: 4. return True 5. return False
228. 汇总区间
题目描述
给定一个 无重复元素 的 有序 整数数组
nums
。返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,
nums
的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于nums
的数字x
。列表中的每个区间范围
[a,b]
应该按如下格式输出:
"a->b"
,如果a != b
"a"
,如果a == b
示例 1:
输入:nums = [0,1,2,4,5,7]
输出:["0->2","4->5","7"]
解释:区间范围是:
[0,2] --> "0->2"
[4,5] --> "4->5"
[7,7] --> "7"
示例 2:
输入:nums = [0,2,3,4,6,8,9]
输出:["0","2->4","6","8->9"]
解释:区间范围是:
[0,0] --> "0"
[2,4] --> "2->4"
[6,6] --> "6"
[8,9] --> "8->9"
解题思路
有两个思路吧,第一个还是暴力循环,两两做差,找出不为1的所有索引,根据这个索引将列表切割,实现区间划分。第二个思路是指针,用一个指针来遍历,指针开始时建立一个head,指针所指与下一个指针所指相差不为1的话,建立一个end,head与end为一个区间。由于可能只有一个数所有开始时,也要要直接设置end=0,后面判断end是否发生变化,如果发生变化,说明是一段区间,否则说明没有进入while循环,那么直接在列表中添加这个数就可以了!一次通过!
解题代码
1. def summaryRanges(nums): 2. ind_p = 0 3. tar_list = [] 4. while ind_p <= len(nums)-1: 5. head = nums[ind_p] 6. end = 0 7. while ind_p!= len(nums)-1 and nums[ind_p] +1 == nums[ind_p+1]: 8. end = nums[ind_p+1] 9. ind_p += 1 10. if end == 0: 11. # 加首 12. tar_str = str(head) 13. tar_list.append(tar_str) 14. else: 15. #加首尾 16. tar_str = str(head) + "->" +str(end) 17. # print(tar_str) 18. tar_list.append(tar_str) 19. ind_p+=1
242. 有效的字母异位词
题目描述
给定两个字符串
s
和t
,编写一个函数来判断t
是否是s
的字母异位词。注意:若
s
和t
中每个字符出现的次数都相同,则称s
和t
互为字母异位词。示例 1:
输入:s = "anagram", t = "nagaram"
输出: true
示例 2:
输入:s = "rat", t = "car"
输出: false
解题思路
如果两个字符串是字母异位词的话,他们的字母构成应该是一模一样的,所有排序之后得到的新单词也应该是相等的,所以,只需要将传入进来的s和t进行排序就可以了,比较排序完生成的两个新单词是否是一样的。今天早上的题目还是比较简单的。
解题代码
1. def isAnagram(s: str, t: str): 2. s_list = [i for i in s] 3. s_list.sort() 4. s_str = "".join(s_list) 5. t_list = [i for i in t] 6. t_list.sort() 7. t_str = "".join(t_list) 8. if s_str == t_str: 9. return True 10. else: 11. return False