# ========================58-II 左旋转字符串=====================================
class Solution:
def reverseLeftWords(self, s: str, n: int) -> str:
res = []
for i in range(n, len(s)):
res.append(s[i])
for i in range(n):
res.append(s[i])
return ''.join(res)
class Solution:
def reverseLeftWords(self, s: str, n: int) -> str:
res = []
for i in range(n, n + len(s)):
res.append(s[i % len(s)])
return ''.join(res)
# =============================================================================
# ======================27 二叉树的镜像==========================================
class Solution:
def mirrorTree(self, root: TreeNode) -> TreeNode:
if not root: return
root.left, root.right = self.mirrorTree(root.right), self.mirrorTree(root.left)
return root
# =============================================================================
# =======================55-I二叉树的深度========================================
class Solution:
def maxDepth(self, root: TreeNode) -> int:
if not root: return 0
return max(self.maxDepth(root.left), self.maxDepth(root.right)) + 1
# =============================================================================
# =======================22 链表中导数第k个节点(利用双游标移动)====================
class Solution:
def getKthFromEnd(self, head: ListNode, k: int) -> ListNode:
former, latter = head, head
for _ in range(k):
former = former.next
while former:
former, latter = former.next, latter.next
return latter
# =============================================================================
# =======================05 替换空格============================================
class Solution:
def replaceSpace(self, s: str) -> str:
res = []
for c in s:
if c == ' ': res.append("%20")
else: res.append(c)
return "".join(res)
# =============================================================================
# ==================06 从尾到头打印链表 ==========================================
class Solution:
def reversePrint(self, head: ListNode) -> List[int]:
res = []
while head:
res.append(head.val)
head = head.next
return res[::-1] # 或者 reverse(res)
# =============================================================================
# =====================54 二叉搜索树的k大节点=====================================
#方法一
class Solution:
def kthLargest(self, root: TreeNode, k: int) -> int:
def dfs(root):
if root == None:
return
dfs(root.right)
if self.k == 0: #这里self.k是将k定义为属性了
return
self.k -= 1
if self.k == 0:
res = root.val
dfs(root.left)
self.k = k
dfs(root)
return res
#方法二
class Solution:
def kthLargest(self, root: TreeNode, k: int) -> int:
#二叉搜索树中序遍历是正序,逆中序遍历是倒序
def search(root):
if not root:
return
elif len(res)>=k:
return
search(root.right)
self.res.append(root.val)
search(root.left)
self.res=[]
search(root)
return res[k-1]
# =============================================================================
# ==================24 反转链表=================================================
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
pre = None
cur = head
while cur:
temp = cur.next
cur.next = pre
pre = cur
cur = temp
return pre
# =============================================================================
# ===================15 二进制中1的个数==========================================
class Solution:
def hammingWeight(self, n: int) -> int:
res = 0
while n:
res += n & 1
n >>= 1
return res
# =============================================================================