バックトラックFrameworkリファレンス・記事:
https://blog.csdn.net/qq_41901915/article/details/104113330
結果:
によって
詳細を表示
実行時:2ミリ秒は、Javaで提出するすべてのユーザーの53.81パーセントを打ちます
メモリ消費量:37.4メガバイトは、Javaで提出するすべてのユーザーの52.98パーセントを破りました
トピック:
与えられた数字の配列は、完全な順列にすべての可能なリターンを繰り返されていません。
例:
入力:[1,2,3]
出力
:
[ [1,2,3]、
[1,3,2]、
[2,1,3]、
[2,3,1]、
[3,1,2 ]
[3,2,1]
]
出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/permutations
すべてのネットワークからの控除が著作権を保有。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。
アイデア:
使用してフレームをバックトラック、バックトラックを使用します
主なポイントは、いくつかのキーを見つけることです
最初の選択肢は、当然のことながら、渡される配列であります
第二は、彼がそれにパスを作成したパスであります
終了条件
コード:
class Solution {
List<List<Integer>> result=new LinkedList<>();
public List<List<Integer>> permute(int[] nums) {
LinkedList<Integer> track=new LinkedList<>();
backtrack(nums,track);
return result;
}
public void backtrack(int[] nums,LinkedList<Integer> track)
{
//成功的条件
if(track.size()==nums.length)
{
result.add(new LinkedList<>(track));
return;
}
//这个for循环表示选择的空间
for(int i=0;i<nums.length;i++)
{
//如果已经选择过了,就不再选择了
if(track.contains(nums[i]))
{
continue;
}
//回溯法的核心先加入,递归,再去掉
track.add(nums[i]);
backtrack(nums,track);
track.removeLast();
}
}
}