力扣刷题记录——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。

解题代码

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. 有效的字母异位词

题目描述

给定两个字符串 st ,编写一个函数来判断 t 是否是 s 的字母异位词。

注意:st 中每个字符出现的次数都相同,则称 st 互为字母异位词。

示例 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


相关文章
|
4天前
|
存储 算法
LeetCode第49题字母异位词分组
LeetCode第49题"字母异位词分组"的解题方法,通过将每个字符串的字符排序后作为键存储在HashMap中,有效地将所有字母异位词分组。
LeetCode第49题字母异位词分组
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
27 6
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
28 4
|
13天前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
42 2
|
4天前
|
算法
LeetCode第57题插入区间
LeetCode第57题"插入区间"的解题方法,利用原区间集有序的特性,通过三步插入操作,有效实现了新区间的插入和重叠区间的合并。
LeetCode第57题插入区间
|
4天前
|
算法
LeetCode第17题电话号码的字母组合
该文章介绍了 LeetCode 第 17 题电话号码的字母组合的解法,通过分析得出可使用递归和回溯的思想解决,避免循环穷举的高循环次数,并给出了具体的编码实现,同时总结了该题较难理解,需要了解递归的本质,当嵌套循环层次多时可考虑递归。
LeetCode第17题电话号码的字母组合
|
13天前
|
索引 Python
【Leetcode刷题Python】从列表list中创建一颗二叉树
本文介绍了如何使用Python递归函数从列表中创建二叉树,其中每个节点的左右子节点索引分别是当前节点索引的2倍加1和2倍加2。
16 7
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
13 4
|
14天前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
32 5
|
13天前
|
算法 Python
【Leetcode刷题Python】 LeetCode 2038. 如果相邻两个颜色均相同则删除当前颜色
本文介绍了LeetCode 2038题的解法,题目要求在一个由'A'和'B'组成的字符串中,按照特定规则轮流删除颜色片段,判断Alice是否能够获胜,并提供了Python的实现代码。
25 3