LeetcodeアルゴリズムJava全解--46.全配列


LeetcodeアルゴリズムJava全解答–46.全配列
文書ディレクトリ
  • LeetcodeアルゴリズムJava全解答--46.全配列
  • アイデア
  • 結果
  • まとめ
  • コード
  • 私の答え
  • 大人たちの答え
  • 試験例
  • その他
  • タイトル
    重複する数値のないシーケンスを指定し、可能なすべての配列を返します.
      : [1,2,3]
      :
    [
        [1,2,3],
        [1,3,2],
        [2,1,3],
        [2,3,1],
        [3,1,2],
        [3,2,1]
    ]
    

    の意見を打診
    元の配列、最終結果の配列、ある配列を再帰する
    最後にループすると、最終結果配列に1回の配列を追加します.
    最後までループしていない場合は、元の戻り方を呼び出し続けます.
    結果
    26%を超えるテストケース
    時間複雑度/空間複雑度:/n
    まとめ
    //TODO実行プロセス
    result: []smallResult: []
    result: []smallResult: [1]
    result: []smallResult: [1, 2]
    result: []smallResult: [1, 2, 3]
    result: [[1, 2, 3]]smallResult: [1, 3]
    result: [[1, 2, 3]]smallResult: [1, 3, 2]
    result: [[1, 2, 3], [1, 3, 2]]smallResult: [2]
    result: [[1, 2, 3], [1, 3, 2]]smallResult: [2, 1]
    result: [[1, 2, 3], [1, 3, 2]]smallResult: [2, 1, 3]
    result: [[1, 2, 3], [1, 3, 2], [2, 1, 3]]smallResult: [2, 3]
    result: [[1, 2, 3], [1, 3, 2], [2, 1, 3]]smallResult: [2, 3, 1]
    result: [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1]]smallResult: [3]
    result: [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1]]smallResult: [3, 1]
    result: [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1]]smallResult: [3, 1, 2]
    result: [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2]]smallResult: [3, 2]
    result: [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2]]smallResult: [3, 2, 1]
    

    コード#コード#
    私の答え
        /**************************************
         *   
                      ,           。
    
           :
    
           : [1,2,3]
           :
         [
         [1,2,3],
         [1,3,2],
         [2,1,3],
         [2,3,1],
         [3,1,2],
         [3,2,1]
         ]
         **************************************/
    
        /*************************************
           :
                ,      ,          
                       ,                     
                         ,          
             
    
           26%     
              /     :  /n
    
               :
    
           :
         ************************************/
        public List> permute(int[] nums) {
    
            if (nums.length == 0) {
                return Collections.EMPTY_LIST;
            }
    
            List> result = new ArrayList<>();
            List smallResult = new ArrayList<>();
            repick(nums, result, smallResult);
            return result;
        }
    
        private void repick(int[] nums, List> result, List smallResult) {
            if (smallResult.size() == nums.length) {
                result.add(new ArrayList(smallResult));
            } else {
                for (int i = 0; i < nums.length; i++) {
                    if (smallResult.contains(nums[i])) {
                        continue;
                    }
                    smallResult.add(nums[i]);
                    repick(nums, result, smallResult);
                    smallResult.remove(smallResult.size() - 1);
                }
    
            }
        }
    

    みんなの答え
    public List> better(int[] nums) {
            List> result = new ArrayList>();
            if(nums == null || nums.length == 0) {
                return result;
            }
            List list = new ArrayList();
            permute(nums, result, 0, list);
            return result;
        }
    
        public void permute(int[] nums, List> result, int index, List list){
            if(index == nums.length){
                List array = new ArrayList(list);
                result.add(array);
                return;
            }
            for(int i=index;i

    テストケース
        @Test
        public void test046() {
            //       
            int[] arr1 = new int[] { 1, 2, 3 };
    
            //        
            List> expResult1 = new ArrayList<>();
            List list1 = new ArrayList<>();
            list1.add(1);
            list1.add(2);
            list1.add(3);
            List list2 = new ArrayList<>();
            list2.add(1);
            list2.add(3);
            list2.add(2);
            List list3 = new ArrayList<>();
            list3.add(2);
            list3.add(1);
            list3.add(3);
            List list4 = new ArrayList<>();
            list4.add(2);
            list4.add(3);
            list4.add(1);
            List list5 = new ArrayList<>();
            list5.add(3);
            list5.add(1);
            list5.add(2);
            List list6 = new ArrayList<>();
            list6.add(3);
            list6.add(2);
            list6.add(1);
            expResult1.add(list1);
            expResult1.add(list2);
            expResult1.add(list3);
            expResult1.add(list4);
            expResult1.add(list5);
            expResult1.add(list6);
    
            //     
            Solution046 solution046 = new Solution046();
            List> result1 = solution046.permute(arr1);
    
            //          
            Assert.assertEquals(expResult1, result1);
    
        }
    

    その他
    コード管理コードクラウドアドレス:https://gitee.com/lizhaoandroid/LeetCodeAll.git
    他の内容を見るには、コラムや私のブログをクリックしてください.https://blog.csdn.net/cmqwan
    「大物たちの答え」のラベルはleetcodeから来ています.権利侵害は私に連絡して削除してください.
    質問があれば連絡してください、連絡先:QQ 3060507060