[持久更新] 劍指offer題目Python做題記錄
阿新 • • 發佈:2018-07-08
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做題記錄