LintCode 16 帶重複的全排列

2021-08-07 12:26:47 字數 1478 閱讀 1473

原題目

再上一題的基礎上做一點改動,就是判斷是不是已經有了。不過時間3084ms,略慢

class solution 

int book = new

int[nums.length];

dfs(nums, book, 0, item, result);

return result;

}public

void

dfs(int nums, int book, int step, listitem, list> result)

return;

}for (int i = 0; i < book.length; i++) }}

}

在執行的過程中去重,時間比我之前的快 2634ms

class solution 

if(nums.length == 0)

arrays.sort(nums);

arraylistlist = new arraylist();

int visited = new

int[nums.length];

for ( int i = 0; i < visited.length; i++)

helper(results, list, visited, nums);

return results;

}public

void

helper(arraylist> results,

arraylistlist, int visited, int nums)

for(int i = 0; i < nums.length; i++)

visited[i] = 1;

list.add(nums[i]);

helper(results, list, visited, nums);

list.remove(list.size() - 1);

visited[i] = 0;}}

}

2666ms

class solution 

int book = new

int[nums.length];

arrays.sort(nums);

dfs(nums, book, 0, item, result);

return result;

}public

void

dfs(int nums, int book, int step, listitem, list> result)

for (int i = 0; i < book.length; i++)

}if (book[i] == 0) }}

}

LintCode 16 帶重複元素的排列

寫在前面 這題和全排列不含重複元素的那題幾乎一樣,我比較垃圾,就用hashset去掉了重複的元素但是看了九章演算法的答案也沒看懂,他寫的很有感覺。用了hash,本來想著怎麼寫hashcode 和equal 方法的,哪知道都幫我寫好了,integer型別的元素儲存在list中的hashcode 和eq...

lintcode 全排列 帶重複元素的排列

全排列,用了子集樹的解法 class solution backtrack 0,nums return res bool isok int t return true void backtrack int t,vector nums for int i 0 i 帶重複元素的排列 篩選條件就是在i和t...

16 帶重複元素的排列

2017.9.14 如果帶有重複元素,那麼當元素重複的時候,直接continue跳出迴圈進行下乙個就好了。這道題不同於第15道題全排列的地方是輸出必須要按順序輸出,不然會報錯。所以需要提前對陣列進行排序。public class solution if nums.length 1 hashsetse...