《劍指offer》python答案整理(1)

2021-08-07 12:14:12 字數 2874 閱讀 8763

1. 二維陣列查詢

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

# -*- coding:utf-8 -*-

class solution:

# array 二維列表

def find(self, target, array):

# write code here

find = false

rows = len(array)

columns = len(array[0])

row=0

column=columns-1

while row=0:

if(array[row][column]==target):

find = true

break

elif(array[row][column]>target):

column-=1

else:

row+=1

return find

解析:二維陣列行、列分別有序,可以借鑑類似分半查詢的思路。可以從二維陣列的左下角或者右上角開始查詢。假設從右上角開始查詢,若陣列值大於目標值,需向數值減小的方向查詢,既向左查詢;若陣列值小於目標值,需要向數值增大的方向查詢。

2. 替換空格

# -*- coding:utf-8 -*-

class solution:

# s 源字串

def replacespace(self, s):

# write code here

lenofl1 = len(s)

blank=0

s=list(s)

for i in range(0, lenofl1):

if s[i] == ' ':

blank +=1

lenofl2 = lenofl1 + 2*blank

for i in range(0, lenofl2-lenofl1):

index1 = lenofl1-1

index2 = lenofl2-1

while index1>=0 and index2>index1:

if s[index1] == ' ':

s[index2] = '0'

index2 -= 1

s[index2] = '2'

index2 -= 1

s[index2] = '%'

index2 -= 1

else:

s[index2] = s[index1]

index2 -= 1

index1 -= 1

return ''.join(s)

3. 從尾到頭列印乙個鍊錶

輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值。

# -*- 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

l=while listnode:

listnode = listnode.next

l.reverse()

return l

解析:簡單的將鍊錶依次加入到列表中,然後用列表的reverse()可以實現功能。這道題還可以考慮用棧,先入後出,完成逆序列印。或者遞迴,先判斷該節點的後繼不為空,呼叫遞迴,然後列印該節點的值。

4. 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。

# -*- 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

val = pre[0]

for i in range(0, len(tin)):

if tin[i] == val:

break

root = treenode(val)

root.left = self.reconstructbinarytree(pre[1:1+i], tin[:i])

root.right = self.reconstructbinarytree(pre[1+i:], tin[i+1:])

return root

解析:前序遍歷的結果裡的第乙個結點是樹的根節點,進而根據中序遍歷結果知道根節點的左子樹為中序遍歷,右子樹中序遍歷為,而根節點的左右子樹前序遍歷也得到了。採用遞迴找到左右子樹的根節點就重構了二叉樹。

劍指offer(Python)替換空格

這道題要求是 將乙個字串中的空格替換成 20 有多少個空格就替換成多少個 20 例如 hello world 中間有兩個空格,則需要輸出的形式是 hello 20 20world 字串首尾的空格亦算在內。class solution def replacespace self,s return 20...

劍指offer Python 替換空格

請實現乙個函式,將乙個字串中的每個空格替換成 20 python字串,有replace方法,可以實現替換,第乙個引數是要替換的內容,第二個引數是替換的新內容 能夠快速完成,果然python作為一種高階語言,不太適合做演算法 但是 replace 相當於 insert 在替換 時,會將原字串元素的位置...

《劍指offer》python 動態規劃

動態規劃是利用空間去換取時間的演算法.主要看 1.初始條件 2.重疊子問題 3.狀態轉移方程 題目描述 乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法 先後次序不同算不同的結果 coding utf 8 class solution def jumpfloo...