劍指offer總結(一)

2021-08-21 16:17:37 字數 4361 閱讀 2588

替換空格

class

solution:

# s 源字串

defreplacespace

(self, s):

# write code here

result=

for char in s:

if char==" ":

result.extend("%20")

else:

result.extend(char)

return

''.join(result)

class

solution

i++;

}int newlength=oldnumber+replacenumber*2;//插入後的長度

if(newlength>length)//如果計算後的長度大於總長度就無法插入

return ;

int poldlength=oldnumber; //注意不要減一因為隱藏個『\0』也要算裡

int pnewlength=newlength;

while(poldlength>=0&&pnewlength>poldlength)//放字元

else

//不是空格就把poldlength指向的字元裝入pnewlength指向的位置

poldlength--; //不管是if還是elsr都要把poldlength前移

}}};

從尾到頭列印鍊錶
class

solution:

# 返回從尾部到頭部的列表值序列,例如[1,2,3]

defprintlistfromtailtohead

(self, listnode):

# write code here

ifnot listnode:

return

result=

while listnode:

result.insert(0,listnode.val)

listnode=listnode.next

return result`

重建二叉樹
class

solution:

# 返回構造的treenode根節點

defreconstructbinarytree

(self, pre, tin):

# write code here

if len(pre)==0:

return

none

if len(pre)==1:

return treenode(pre[0])

else:

node=treenode(pre[0])

node.left=self.reconstructbinarytree(pre[1:tin.index(pre[0])+1],tin[:tin.index(pre[0])])

node.right=self.reconstructbinarytree(pre[tin.index(pre[0])+1:],tin[tin.index(pre[0])+1:])

return node

用兩個棧實現佇列
class solution

stack1.push(node);

while(!stack2.empty())

}int pop()

private:

stack

stack1;

stack

stack2;

};

class solution

int pop()

}a=stack2.top();

stack2.pop();

return a;

}private:

stack

stack1;

stack

stack2;

};

旋轉陣列的最小值
class

solution:

defminnumberinrotatearray

(self, rotatearray):

# write code here

ifnot rotatearray:

return

0for i in range(len(rotatearray)-1):

if rotatearray[i+1]return rotatearray[i+1]

return rotatearray[0]

class solution:

def minnumberinrotatearray(self, array):

# write code here

iflen(array) == 0:

return 0;

left = 0;

right = len(array) - 1;

middle = -1;

while

array[left]>=array[right]:

ifright-left==1:

middle = right;

break;

middle = left + (right - left) / 2

ifarray[middle] >= array[left]:

left = middle;

ifarray[middle] <= array[right]:

right = middle;

return array[middle];

斐波那契數列
class

solution:

deffibonacci

(self, n):

# write code here

if n==0:

return

0 dp=[0]*(n+1)

dp[0]=0

dp[1]=1

for i in range(2,n+1):

dp[i]=dp[i-1]+dp[i-2]

return dp[n]

跳台階
class

solution:

defjumpfloor

(self, number):

# write code here

if number==0:

return

0 dp=[0]*(number+1)

dp[0]=1

dp[1]=1

for i in range(2,number+1):

dp[i]=dp[i-1]+dp[i-2]

return dp[number]

**跳台階
class

solution:

defjumpfloorii

(self, number):

# write code here

if number==0:

return

0if number==1:

return

1if number==2:

return

2 dp=[0]*(number+1)

dp[0]=1

dp[1]=1

for i in range(2,number+1):

dp[i]=2*dp[i-1]

return dp[number]

矩形覆蓋

二進位制中1的個數

class

solution:

defnumberof1

(self, n):

# write code here

count = 0

for i in range(32):

count += (n >> i)&1

return count

調整陣列使得奇數字於偶數之前
class

solution:

defreorderarray

(self, array):

# write code here

for i in range(1,len(array)):

k=iwhile k:

if array[k]%2

and array[k-1]%2==0:

array[k],array[k-1]=array[k-1],array[k]

k-=1

else:

break

return array

劍指offer總結 陣列

劍指offer調整整數陣列順序 題目描述 輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。public class solution for int j top 1 j botto...

劍指offer練習(一)

寫在前面 純粹開個部落格督促自己刷題而已,只是把每個題的相對較好的解法蒐集過來,以便自己以後好找而已,以後也會不時寫一些跟產品經理學習有關的東西,理由同上,希望自己能堅持下去。解法 首先遍歷原字串,找出字串的長度以及其中的空格數量,根據原字串的長度和空格的數量我們可以求出最後新字串的長度。設定兩個指...

劍指Offer(一) 棧

目錄 1 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。2 棧的壓入 彈出序列 思路 3 包含min函式的棧 思路 c 解答 python解答 4 二叉搜尋樹的後序遍歷序列 5 按之字形順序列印二叉樹 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。cod...