zoukankan      html  css  js  c++  java
  • [Algorithm] 46. Permutations

    Given a collection of distinct integers, return all possible permutations.

    Example:

    Input: [1,2,3]
    Output:
    [
      [1,2,3],
      [1,3,2],
      [2,1,3],
      [2,3,1],
      [3,1,2],
      [3,2,1]
    ]

    The idea is using recursive approach, we can define a recursive function

    helper(prefix, suffix, result)

    Where the prefix is: for example

    [1]

    suffix:

    [2, 3]

    So every time, we take one value from suffix, put into prefix.

    The stop logic is that when suffix length is zero, then we push the prefix into result.

    if (sfx.length === 0) {
         result.push(pfx);
    }
    /**
     * @param {number[]} nums
     * @return {number[][]}
     */
    var permute = function(nums) {
        function helper (pfx, sfx, result) {
            if (sfx.length === 0) {
                result.push(pfx);
            } else {
                const len = sfx.length;
                for (let i = 0; i < len; i++) {
                    helper(
                        pfx.concat(sfx[i]), 
                        sfx.slice(0, i).concat(sfx.slice(i+1, sfx[len])), 
                        result
                    );
                }
            }
            
            return result;
        }
        
        return helper([], nums, []);
    };
    
    permute([1,2,3])
    
    /*
    
    [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
    
    */
    [], [1,2,3]
    
    [1], [2,3]
    
    [1, 2], [3], [] | [1, 3], [2] 
    
    ---> [1,2,3] | [1,2,3]
    
    [2], [1, 3]
    [2, 1], [3] | [2,3] [1]
    
    --> [2,1,3] | [2,3,1]
    
    [3], [1,2]
    [3,1][2] | [3,2], [1]
    
    --> [3,1,2] | [3,2,1]
  • 相关阅读:
    Spark RDD 创建(一)
    编译Spark-1.6.0源码
    Strom学习笔记一
    Hbase笔记——RowKey设计
    Hbase物理模型
    HDFS分布式文件系统设计思想
    Hbase 基本命令
    内部排序算法
    278. First Bad Version
    266. Palindrome Permutation
  • 原文地址:https://www.cnblogs.com/Answer1215/p/12008553.html
Copyright © 2011-2022 走看看