1. 程式人生 > >[持久更新] 劍指offer題目Python做題記錄

[持久更新] 劍指offer題目Python做題記錄

array tno 節點 gif tlist 思路 實現 span elf

第一題

  題目:在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。

  思路:先快速定位到該數在哪一行,然後再迅速定位具體位置。

技術分享圖片
# -*- coding:utf-8 -*-
class Solution:
    # array 二維列表
    def Find(self, target, array):
        # write code here
        row = 0
        col = len(array[0]) - 1 
        while
col >= 0 and row < len(array): if target == array[row][col]: return True elif target > array[row][col]: row = row + 1 else: col = col - 1 return False
第一題

第二題

  題目:請實現一個函數,將一個字符串中的空格替換成“%20”。例如,當字符串為We Are Happy.則經過替換之後的字符串為We%20Are%20Happy。

  思路:使用字符串的replace方法即可。

技術分享圖片
# -*- coding:utf-8 -*-
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        s = s.replace( ,%20)
        return s
第二題

第三題

  題目:輸入一個鏈表,按鏈表值從尾到頭的順序返回一個ArrayList。

  思路:先用append方法講鏈表儲存,然後使用reverse方法顛倒列表。

技術分享圖片
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x): # self.val = x # self.next = None class Solution: # 返回從尾部到頭部的列表值序列,例如[1,2,3] def printListFromTailToHead(self, listNode): # write code here out = [] while listNode: out.append(listNode.val) listNode = listNode.next out.reverse() return out
第三題

第四題

  題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重復的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。

  思路:前序遍歷是由根開始,從左樹到右數遍歷。中序遍歷是由左樹開始,到根節點然後到右樹。後序與中序相反。只考慮前序和中序,根節點在前序的首位,在中序的左樹與右樹的分割點。通過index方法,可以得出左樹與右樹的長度,然後通過遞歸重建二叉樹。

技術分享圖片
# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    # 返回構造的TreeNode根節點
    def reConstructBinaryTree(self, pre, tin):
        # write code here
        if len(pre) == 0:
            return None
        elif len(pre) == 1:
            return TreeNode(pre[0])
        else:
            tree = TreeNode(pre[0])
            tree.left = self.reConstructBinaryTree(pre[1:tin.index(pre[0])+1],tin[:tin.index(pre[0])])
            tree.right = self.reConstructBinaryTree(pre[tin.index(pre[0])+1:],tin[tin.index(pre[0])+1:])
        return tree
第四題

[持久更新] 劍指offer題目Python做題記錄