46.ブラシLeetcode完全な配列のjavaのタイトル

バックトラック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();
        }
    }
}

 

公開された418元の記事 ウォンの賞賛436 ビュー220 000 +

おすすめ

転載: blog.csdn.net/qq_41901915/article/details/104114605