本专栏主要记录力扣的刷题记录,备战蓝桥杯,供复盘和优化算法使用,也希望给大家带来帮助,博主是算法小白,希望各位大佬不要见笑,今天要分享的是——《231. 2 的幂、228. 汇总区间、242. 有效的字母异位词》。
目录
231. 2 的幂
题目描述
解题思路
解题代码
228. 汇总区间
题目描述
解题思路
解题代码
242. 有效的字母异位词
题目描述
解题思路
解题代码
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。
解题代码
def isPowerOfTwo(n: int):
for i in range(0,32):
if 2**i == n:
return True
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循环,那么直接在列表中添加这个数就可以了!一次通过!
解题代码
def summaryRanges(nums):
ind_p = 0
tar_list = []
while ind_p <= len(nums)-1:
head = nums[ind_p]
end = 0
while ind_p!= len(nums)-1 and nums[ind_p] +1 == nums[ind_p+1]:
end = nums[ind_p+1]
ind_p += 1
if end == 0:
# 加首
tar_str = str(head)
tar_list.append(tar_str)
else:
#加首尾
tar_str = str(head) + "->" +str(end)
# print(tar_str)
tar_list.append(tar_str)
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进行排序就可以了,比较排序完生成的两个新单词是否是一样的。今天早上的题目还是比较简单的。
解题代码
def isAnagram(s: str, t: str):
s_list = [i for i in s]
s_list.sort()
s_str = "".join(s_list)
t_list = [i for i in t]
t_list.sort()
t_str = "".join(t_list)
if s_str == t_str:
return True
else:
return False