leetcode刷題記錄 25 簡單

2021-10-24 07:20:33 字數 3270 閱讀 3043

題目:

給定乙個矩陣a, 返回a的轉置矩陣。

矩陣的轉置是指將矩陣的主對角線翻轉,交換矩陣的行索引與列索引。

思路:行列下標轉換就行

/**

* @param a

* @return

*/var transpose = function(a)

} return res;

};

題目:

給定乙個正整數n,找到並返回n的二進位制表示中兩個相鄰 1 之間的最長距離。 

如果沒有兩個相鄰的 1,返回0

/**

* @param n

* @return

*/var binarygap = function(n)

} return max;

};

也可用字串'1'分割字串,去掉首尾的成員,取剩下的成員中長度最大的那個

/**

* @param n

* @return

*/var binarygap = function(n) ;

題目:

請考慮一顆二叉樹上所有的葉子,這些葉子的值按從左到右的順序排列形成乙個 葉值序列 。

舉個例子,如上圖所示,給定一顆葉值序列為 (6, 7, 4, 9, 8) 的樹。

如果有兩顆二叉樹的葉值序列是相同,那麼我們就認為它們是 葉相似 的。

如果給定的兩個頭結點分別為 root1 和 root2 的樹是葉相似的,則返回 true;否則返回 false 。

思路:先用深度優先遍歷,找出所有的葉節點,、然後兩棵樹生成葉節點連線的字串,比較即可

/**

* definition for a binary tree node.

* function treenode(val)

*//**

* @param root1

* @param root2

* @return

*/var leafsimilar = function (root1, root2) -`

return rec(t.left)+rec(t.right)

}return rec(root1) === rec(root2)

};

或者用陣列,先生成一棵樹的節點,然後另一顆樹去比較,優點是不需要遍歷第二棵樹所有的節點

/**

* definition for a binary tree node.

* function treenode(val)

*//**

* @param root1

* @param root2

* @return

*/var leafsimilar = function(root1, root2)

if (!root.left && !root.right) else

return;

}search(root.left, type);

search(root.right, type);

};search(root1, true);

search(root2, false);

return flag

};

題目:

機械人在乙個無限大小的網格上行走,從點 (0, 0) 處開始出發,面向北方。該機械人可以接收以下三種型別的命令:

-2:向左轉 90 度

-1:向右轉 90 度

1 <= x <= 9:向前移動 x 個單位長度

在網格上有一些格仔被視為障礙物。

第 i 個障礙物位於網格點  (obstacles[i][0], obstacles[i][1])

機械人無法走到障礙物上,它將會停留在障礙物的前乙個網格方塊上,但仍然可以繼續該路線的其餘部分。

返回從原點到機械人所有經過的路徑點(座標為整數)的最大歐式距離的平方。

思路:由題意可知,初始化機械人位置為原點(0,0)

初始化座標系

dx = [0,1,0,-1]

dy = [1,0,-1,0]

其實就是座標系點從北部方向順時針方向存放點座標的方向向量陣列

dx和dy一一對應乙個座標點

機械人行走方向

(-2):左轉,o->w,wx = (ox+3)%4

(-1):右轉,o->e,wx = (ox+1)%4

解釋方向只有東西南北四個方向,所以無論怎麼走,都不會超出方向向量陣列裡的取值範圍

因此通過取模來迴圈取對應陣列的位置

(x): 機械人不轉彎並向前走x個格仔

一步一步走,從1開始遍歷

判斷下一步是否有障礙物

有,繼續走

無,進入下一輪

解題技巧

儲存障礙物為hash表,提公升程式效能

/**

* @param commands

* @param obstacles

* @return

*/var robotsim = function(commands, obstacles) ;

for(var r = 0;r題目:

給定乙個帶有頭結點head的非空單鏈表,返回鍊錶的中間結點。

如果有兩個中間結點,則返回第二個中間結點。

思路:快慢指標或者用陣列都行

/**

* definition for singly-linked list.

* function listnode(val)

*//**

* @param head

* @return

*/var middlenode = function(head)

return list[~~(list.length / 2)]|| null;

};

/**

* definition for singly-linked list.

* function listnode(val)

*//**

* @param head

* @return

*/var middlenode = function(head)

return slow;

};

leetcode刷題記錄

我覺得每天來兩道,練習練習,再看看人家是怎麼優化的。1.給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。c 暴力求解,204ms,9.1m class solution for index,num in enumerate ...

LeetCode刷題記錄

動態規劃和貪心演算法的異同點 class solution throw newruntimeexception 時間複雜度 o n 2 對於每個元素,我們試圖通過遍歷陣列的其餘部分來尋找它所對應的目標元素,這將耗費 o n o n 的時間。因此時間複雜度為 o n 2 需要一種方法,尋找符合要求的元...

leetcode刷題記錄

工作之餘刷刷題排解下寂寞 1 面試題66.構建乘積陣列 解題思路 題目要求可以簡化為求陣列中任意乙個元素左右兩邊所有元素的乘積。偷懶就用了乙個套路,練習了p c c python class solution def constructarr self,a list int list int 除法是...