劍指offer(十七,十八,十九)樹的子結構,二叉樹的映象,順時針列印矩陣
簡單題,判斷好每種情況,(原來劍指offer這個oj需要把js的函式寫在給的solution函式裡才能AC啊)
/* function TreeNode(x) { this.val = x; this.left = null; this.right = null; } */ function HasSubtree(pRoot1, pRoot2) { // write code here if(pRoot1 !== null && pRoot2 !== null) { if( judge(pRoot1,pRoot2) ){ return true; }else { return HasSubtree(pRoot1.left,pRoot2) || HasSubtree(pRoot1.right,pRoot2) } }else { return false } function judge(p1, p2) { if(p2===null) return true; if(p1===null) return false; if(p1.val !== p2.val )return false; return judge(p1.left,p2.left)&&judge(p1.right,p2.right); } }
傳說中的毒瘤題,曾經的一個大佬去google面試時現場沒寫出來,被google說滾蛋。。。
其實很簡單,老樣子樹結構判斷好null
/* function TreeNode(x) { this.val = x; this.left = null; this.right = null; } */ function Mirror(root) { if(root) { var tmp = root.left; root.left = root.right; root.right = tmp; if(root.left) { Mirror(root.left); } if(root.right) { Mirror(root.right); } } } module.exports = { Mirror : Mirror };
之前就遇到別人討論過這題,今天碰到這題也格外的親切,一種很好的思路:控制好要列印的矩形邊界,遍歷即可,一個矩形可由左上點和又下角的點確定(最近做的一個專案就遇到畫矩形相關)。一開始時時打算每次直接暴力遍歷矩形邊,遍歷完一次外邊界後用splice刪除遍歷的元素,其實沒必要。自己控制邊界點即可。
function printMatrix(matrix) { var row = matrix.length; var col = matrix[0].length; if(row===0||col===0) return null; row--; col--; var ans = []; //定義好左上點和右下點,把矩陣建立以左上點為座標 let left = 0,top = 0,right = col,bottom = row; while(left <= right && top <= bottom) { //四個迴圈,分別控制頂層,右邊界,底層,左邊界的遍歷 //現在是上邊界,從左到右 for(let i = left; i<=right; i++) { ans.push(matrix[top][i]); } //現在到達了右邊界,從上到下 for(let i = top+1; i<=bottom; i++) { ans.push(matrix[i][right]); } //現在到了下邊界,從右到左 if(bottom>top) {//防止單行重複遍歷 for(let i = right-1; i>=left; i--) { ans.push(matrix[bottom][i]); } } //現在到了左邊界,從下往上 if(right>left){//防止單列重複遍歷 for(let i = bottom-1; i>top; i--) {//注意這裡不能等於,起點肯定是被push了的 ans.push(matrix[i][left]); } } //控制邊界 left++,top++,right--,bottom--; } return ans; } var matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]; console.log(printMatrix(matrix));
相關推薦
劍指offer(十七,十八,十九)樹的子結構,二叉樹的映象,順時針列印矩陣
簡單題,判斷好每種情況,(原來劍指offer這個oj需要把js的函式寫在給的solution函式裡才能AC啊) /* function TreeNode(x) { this.val = x; this.left = null; this.right = null; } */ fun
劍指offer第七天
包含 存在 例如 保存 模式識別 post 測試 mark 輸入一個整數 30.連續子數組的最大和 HZ偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了:在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決
【劍指offer第七題】斐波那契數列
題目描述 大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。 n<=39 剛開始覺得輸入為一個數,然後找到這個數在斐波那契數列中的位置
【劍指Offer】15順時針列印矩陣
題目描述 輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每一個數字,例如,如果輸入如下4 X 4矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 時間限制:
[劍指offer] --20.順時針列印矩陣
題目描述 輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每一個數字,例如,如果輸入如下4 X 4矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. p
【Python資料結構與演算法】【劍指offer】順時針列印矩陣
題目描述與連結: https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a?tpId=13&tqId=11172&tPage=1&rp=1&ru=/ta/coding-intervi
劍指Offer(29):順時針列印矩陣
題目 輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每個數字,例如,如果輸入如下矩陣: 則依次打印出陣列:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。 思路 將結果存放在vector 陣列中,從左到右,再從
劍指offer——(8)重建二叉樹&&二叉樹的深度
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x)
[劍指offer]順時針列印矩陣
調了兩三小時,從通過11%的案例,到60%,再到80%,再到100% 輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每一個數字,例如,如果輸入如下4 X 4矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數字1,2,3,4,8,12,16,15,1
劍指 Offer - 19:順時針列印矩陣
題目描述 輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每一個數字,例如,如果輸入如下4 X 4矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數字:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,
劍指offer——(17)順時針列印矩陣
學資料結構的時候有做過一道類似的題目,不一樣的是當時的二維陣列規定是正方形,而這裡是矩形,然後我就不會了。。 演算法圖示(4x3矩陣): ac程式碼(java): import java.util.ArrayList; public class Solut
劍指offer-19:順時針列印矩陣
題目描述 輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每一個數字,例如,如果輸入如下4 X 4矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 程
劍指offer之順時針列印矩陣
題目描述 輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每一個數字,例如,如果輸入如下4 X 4矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數字
劍指offer-順時針列印矩陣(陣列)
題目描述 輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每一個數字,例如,如果輸入如下4 X 4矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.  
劍指offer——19.順時針列印矩陣
題目描述: 輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每一個數字,例如,如果輸入如下4 X 4矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11
【劍指offer{15-18}】反轉連結串列、合併兩個排序的連結串列、樹的子結構、二叉樹的映象
反轉連結串列、合併兩個排序的連結串列、樹的子結構、二叉樹的映象反轉連結串列題目描述C++程式碼題目描述C++程式碼樹的子結構題目描述C++程式碼題目描述C++程式碼 反轉連結串列 題目描述 輸入一
【劍指offer{19-22}】順時針列印矩陣、包含min函式的棧、棧的壓入彈出序列、從上往下列印二叉樹
順時針列印矩陣、包含min函式的棧、棧的壓入彈出序列、從上往下列印二叉樹 順時針列印矩陣 題目描述 輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每一個數字,例如,如果輸入如下4 X 4矩陣:
【劍指offer】順時針列印矩陣【python】
題目描述 輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每一個數字,例如,如果輸入如下4 X 4矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數字
劍指offer66題--Java實現,c++實現和python實現 19.順時針列印矩陣
題目描述 輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每一個數字,例如,如果輸入如下4 X 4矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. C++
劍指Offer——樹:把二叉樹列印成多行(二叉樹層序遍歷)
對於二叉樹的最好的解決辦法就是遞迴。遍歷方法無外乎先序遍歷,中序遍歷,後序遍歷方法以及層序遍歷方法。這裡給大家安利一個關於樹的面試題的連結,博主walkinginthewind比較全面且詳細的介紹了二叉樹相關的面試題:對於層序遍歷,最好的方法就是用佇列記錄遍歷節點的值,按層列