方法:經典的n皇后問題,基本所有的演算法書都會包含的問題,經典的解法為回溯遞迴,一層層的向下掃瞄,需要用到乙個pos陣列,其中pos[i]表示第i行皇后的位置,初始化為-1,然後從第0開始遞迴,每一行都一次遍歷各列,判斷如果在該位置皇后會不會有衝突,依次類推,當到最後乙個皇后放好後,一種解法就生成了,將其存入結果res中,再繼續。
c++**:
class solution
void
solvenqueendfs
(vector<
int>
&pos,
int row,vector>
&res)
res.
push_back
(out);}
else}}
} bool isvalid
(vector<
int>
& pos,
int row,
int col)
}return true;}}
;
與上面一題,題目一樣。但是需要的結果不是解法,只需要給出解法的數量即可。
方法:用當前數與子串行和比較
class solution
return res;}}
;
另乙個方法:o(n
lgn)
o(nlgn)
o(nlgn
)(待了解)
方法:對於這種螺旋遍歷的方法,重要的是要確定上下左右四條邊的位置,那麼初始化的時候,上邊up就是0,下邊down就是m-1,左邊left是0,右邊right是n-1。然後我們進行while迴圈,先遍歷上邊,將所有元素加入結果res,然後上邊下移一位,如果此時上邊大於下邊,說明此時已經遍歷完成了,直接break。同理對於下邊,左邊,右邊,依次進行相對應的操作,這樣就會使得座標很有規律,並且不易出錯。(理解**)
方法:首先題目的意思是每個元素代表你在該位置可以跳躍的最大長度。貪婪演算法greedy algorithm,因為我們並不是很關心每乙個位置上的剩餘步數,我們只希望知道能否到達末尾,也就是說我們只對最遠能到達的位置感興趣,所以我們維護乙個變數reach,表示最遠能到達的位置,初始化為0。遍歷陣列中每乙個數字,如果當前座標大於reach或者reach已經抵達最後乙個位置則跳出迴圈,否則就更新reach的值為其和i + nums[i]中的較大值,其中i + nums[i]表示當前位置能到達的最大位置。
c++**:
class solution
return reach >= n-1;}};
LeetCode 實踐練習16 20
方法 還是先將陣列排個序,然後遍歷陣列,思路跟上一題相似,都是先確定乙個數,然後用兩個指標left和right來滑動尋找另外兩個數,每確定就求三數之和,然後算和給定值的差的絕對值存在newdiff中,比較更新即可。遞迴的思想 不是很了解,需詳細了解 方法 在這裡為了避免重複項,我們使用了stl中的s...
LeetCode 實踐練習36 40
方法 遍歷每個數字的時候,就看看包含當前位置的行和列以及3x3小方陣中是否已經出現該數字,那麼我們需要三個標誌矩陣,分別記錄各行,各列,各小方陣是否出現某個數字,其中行和列標誌下標很好對應,就是小方陣的下標需要稍稍轉換一下.方法 求解數獨的題是在之前那道 valid sudoku 驗證數獨的基礎上的...
LeetCode 實踐練習61 65
方法 此題一種方法,是利用快慢指標,快指標先走k步,然後兩個指標一起走,當快指標走到末尾時,滿指標指的下乙個位置即是新順序的頭結點 特殊情況鍊錶為空,k n 另一種方法,乙個指標即可,就是先遍歷整個鍊錶獲得鍊錶長度n,然後鍊錶的頭和尾接起來,然後往後走 n k n 就到達了新鍊錶的頭節點前乙個點,這...