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...