原題目
再上一題的基礎上做一點改動,就是判斷是不是已經有了。不過時間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...