原创 JZ26 二叉搜索樹與雙向鏈表

二叉搜索樹與雙向鏈表 輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。   思路: 二叉搜索樹的中序遍歷爲 遞增序列 。將 二叉搜索樹 轉換成一個 “排序的循環雙向鏈表”

原创 JZ29 最小的K個數

最小的K個數 給定一個數組,找出其中最小的K個數。例如數組元素是4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4。如果K>數組的長度,那麼返回一個空的數組   方法1:堆思路和算法 我們用一個大根堆實時維護數組的前

原创 JZ27 字符串的排列

字符串的排列 輸入一個字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串abc,則按字典序打印出由字符a,b,c所能排列出來的所有字符串abc,acb,bac,bca,cab和cba。 輸入描述: 輸入一個字符串,長度不超過9(

原创 JZ35 數組中的逆序對

數組中的逆序對 題目: 在數組中的兩個數字,如果前面一個數字大於後面的數字,則這兩個數字組成一個逆序對。輸入一個數組,求出這個數組中的逆序對的總數P。並將P對1000000007取模的結果輸出。 即輸出P%1000000007 (題目保證輸

原创 JZ22 從上往下打印二叉樹

從上往下打印二叉樹   從上往下打印出二叉樹的每個節點,同層節點從左至右打印。   func PrintFromTopToBottom( root *TreeNode ) []int { if root == nil {

原创 JZ23 二叉搜索樹的後序遍歷序列

二叉搜索樹的後序遍歷序列 輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。 解題思路二叉搜索樹:左子樹的元素是都小於根元素,右子樹都大於根元素後序遍歷

原创 JZ21 棧的壓入、彈出序列

棧的壓入、彈出序列 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否爲該棧的彈出順序。假設壓入棧的所有數字均不相等。   解題思路1,用go語言slice建一個輔助棧,來順序添加壓入序列2,每次添加一個元素,去跟彈出序列比

原创 JZ24 二叉樹中和爲某一值的路徑

二叉樹中和爲某一值的路徑 輸入一顆二叉樹的根節點和一個整數,按字典序打印出二叉樹中結點值的和爲輸入整數的所有路徑。路徑定義爲從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。  解題思路: 遞歸回溯的解法 1.按照前序方式去遍歷(根

原创 19 包含min函數的棧

題目描述 定義棧的數據結構,請在該類型中實現一個能夠得到棧最小元素的min函數。   思路:一個棧存普通元素,一個最小棧存放目前位置最小的元素,只在壓入的時候判斷是否爲空以及最小元素,其他情況正常處理。   package main

原创 JZ19 順時針打印矩陣

順時針打印矩陣 題目描述 輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數字,例如,如果輸入如下矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數字1,2,3,4,8,12,16

原创 10 矩形覆蓋

題目描述 我們可以用2*1的小矩形橫着或者豎着去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法? 注意n==0的時候有0中方法。   func rectCover( number int )

原创 9 變態跳臺階

題目描述 一隻青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。   follow up問題要思考前面解決問題的方法,這題就是用數學方法統計出結果的例子。 f(n) = f(n -

原创 JZ15 反轉鏈表

題目描述 輸入一個鏈表,反轉鏈表後,輸出新鏈表的表頭。   func ReverseList( head *ListNode ) *ListNode { // write code here if head == ni

原创 11 二進制中1的個數

題目描述 輸入一個整數,輸出該數32位二進制表示中1的個數。其中負數用補碼錶示。 因爲golang的int是無限精度的,c++的int是32位的,所以golang的負數相當於前面有無限個1,要對golang的負數做處理. func N

原创 JZ16 合併兩個排序的鏈表

題目描述 輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表,當然我們需要合成後的鏈表滿足單調不減規則。   思路: 歸併算法的思路,注意首先判斷兩個鏈表節點都不爲空,判斷大小while循環之後,要看哪個鏈表節點不爲空,使用哨兵節點的方法處