文章目录
一,二叉树的前序遍历
1,程序简介
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
示例 1:
- 输入:root = [1,null,2,3]
- 输出:[1,2,3]
示例 2:
- 输入:root = []
- 输出:[]
示例 3:
- 输入:root = [1]
- 输出:[1]
示例 4:
- 输入:root = [1,2]
- 输出:[1,2]
示例 5:
- 输入:root = [1,null,2]
- 输出:[1,2]
提示:
- 树中节点数目在范围 [0, 100] 内
- -100 <= Node.val <= 100
2,程序代码
# -*- coding: utf-8 -*-
"""
Created on Wed Feb 2 15:45:49 2022
Function: 二叉树的前序遍历
@author: 小梁aixj
"""
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def __init__(self):
self.ans = []
def preorderTraversal(self, root: TreeNode) -> List[int]:
if not root:
return []
self.ans.append(root.val)
self.preorderTraversal(root.left)
self.preorderTraversal(root.right)
return self.ans
二,汇总区间
1,程序简介
给定一个无重复元素的有序整数数组 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”
示例 3:
- 输入:nums = []
- 输出:[]
示例 4:
- 输入:nums = [-1]
- 输出:["-1"]
示例 5:
- 输入:nums = [0]
- 输出:[“0”]
提示:
- 0 <= nums.length <= 20
- − 2 31 < = n u m s [ i ] < = 2 31 − 1 -2^{31} <= nums[i] <= 2^{31} - 1 −231<=nums[i]<=231−1
- nums 中的所有值都 互不相同
- nums 按升序排列
2,程序代码
# -*- coding: utf-8 -*-
"""
Created on Sun Feb 6 18:12:32 2022
Function: 汇总区间
@author: 小梁aixj
"""
class Solution:
def summaryRanges(self, nums: List[int]) -> List[str]:
n = len(nums)
left = 0
right = 0
ans = []
while right < n:
while right < n - 1 and nums[right] + 1 == nums[right + 1]:
right += 1
tmp = [str(nums[left])]
if nums[left] != nums[right]:
tmp.append("->")
tmp.append(str(nums[right]))
ans.append("".join(tmp))
right += 1
left = right
return ans
三,颠倒二进制位
1,程序简介
颠倒给定的 32 位无符号整数的二进制位。
提示:
- 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。
- 在 Java 中,编译器使用二进制补码(https://baike.baidu.com/item/二进制补码/5295284)记法来表示有符号整数。因此,在 示例 2 中,输入表示有符号整数 -3,输出表示有符号整数 -1073741825。
示例 1:
- 输入:n = 00000010100101000001111010011100
- 输出:964176192 (00111001011110000010100101000000)
- 解释:输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596,
因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。
示例 2:
- 输入:n = 11111111111111111111111111111101
- 输出:3221225471 (10111111111111111111111111111111)
- 解释:输入的二进制串 11111111111111111111111111111101 表示无符号整数 4294967293,
因此返回 3221225471 其二进制表示形式为 10111111111111111111111111111111 。
提示:
- 输入是一个长度为 32 的二进制字符串
进阶:
- 如果多次调用这个函数,你将如何优化你的算法?
2,程序代码
# -*- coding: utf-8 -*-
"""
Created on Sun Feb 6 18:12:57 2022
Function: 颠倒二进制位
@author: 小梁aixj
"""
class Solution:
def reverseBits(self, n: int) -> int:
j = 0
y = bin(n)[2::]
if len(y) != 32:
j = 32 - len(y)
m = y[::-1]
m = m + "0" * j
return int(m, 2)