程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Combinations -- LeetCode

Combinations -- LeetCode

編輯:C++入門知識

 
這道題是NP問題的題目,時間復雜度沒辦法提高,用到的還是N-Queens中的方法:用一個循環遞歸處理子問題。實現的代碼跟Combination Sum非常類似而且更加簡練,因為不用考慮重復元素的情況,而且元素只要到了k個就可以返回一個結果。代碼如下:

public ArrayList> combine(int n, int k) {
    ArrayList> res = new ArrayList>();
    if(n<=0 || n(), res);
    return res;
}
private void helper(int n, int k, int start, ArrayList item, ArrayList> res)
{
    if(item.size()==k)
    {
        res.add(new ArrayList(item));
        return;
    }
    for(int i=start;i<=n;i++)
    {
        item.add(i);
        helper(n,k,i+1,item,res);
        item.remove(item.size()-1);
    }
}
NP問題在LeetCode中出現的頻率很高,例如N-Queens,Sudoku Solver,Combination Sum等等。不過這類題目都是用一種方法而且也沒有辦法有時間上的提高,所以還是比較好掌握的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved