15.permutations

中等 全排列

24%
通过

给定一个数字列表,返回其所有可能的排列。

样例

给出一个列表[1,2,3],其全排列为:

[

    [1,2,3],

    [1,3,2],

    [2,1,3],

    [2,3,1],

    [3,1,2],

    [3,2,1]

]

挑战

能否不使用递归来实现?

public class Solution {
    
    public List<List<Integer>> permute(int[] nums) {
        List<List<Integer>> rst = new ArrayList<List<Integer>>();
        ArrayList<Integer> list = new ArrayList<Integer>();
        helper(rst,list,nums);
        return rst;
    }
    
    private void helper(List<List<Integer>> rst,ArrayList<Integer> list,int[]nums)
    {
        if(list.size() == nums.length)
        {
            rst.add(new ArrayList<Integer>(list));
            return;
        }
        for(int i = 0; i < nums.length; i++)
        {
            if(list.contains(nums[i])){
                continue;
            }
            list.add(nums[i]);
            helper(rst,list,nums);
            list.remove(list.size()-1);
        }
    }
}

/**
 * 
 * nums :[1,2,3]
 * helper(rst,list,nums)
 *      i = 0
 *          list:[1]
 *          helper(rst,list,nums)
 *              i = 0
 *                  continue;
 *              i = 1
 *                  list: [1,2]
 *                  helper(rst,list,nums)
 *                      i = 0
 *                          continue;
 *                      i = 1
 *                          continue;
 *                      i = 2;
 *                          list:[1,2,3]
 *                          helper(rst,list,nums)
 *                              rst:{[1,2,3]}
 *                              return;
 *                          list:[1,2]
 *                  list:[1]
 *              i = 2
 *                  list:[1,3]
 *                  helper(rst,list,nums)
 *                      i = 0
 *                          continue;
 *                      i = 1
 *                          list: [1,3,2]
 *                          helper(rst,list,nums)
 *                              rst:{[1,2,3],[1,3,2]}
 *                              return;
 *                          list:[1,3]
 *                      i = 2
 *                          continue;
 *                  list:[1]
 *          list:[ ]
 *      i = 1
 *          list:[2]
 *          helper(rst,list,nums)
 *              i = 0
 *                  list:[2,1]
 *                  helper(rst,list,nums)
 *                      i = 0
 *                          continue;
 *                      i = 1
 *                          continue;
 *                      i = 2
 *                          list:[2,1,3]
 *                          helper(rst,list,nums)
 *                              rst:{[1,2,3],[1,3,2],[2,1,3]}
 *                              return;
 *                          list:[2,1]
 *                  list:[2]
 *              i = 1
 *                  continue;
 *              i = 2
 *                  list:[2,3]
 *                  helper(rst,list,nums)
 *                      i = 0
 *                          list:[2,3,1]
 *                          helper(rst,list,nums)
 *                              rst:{[1,2,3],[1,3,2],[2,1,3],[2,3,1]}
 *                              return;
 *                          list:[2,3]
 *                      i = 1
 *                          continue;
 *                      i = 2;
 *                          continue;
 *                  list:[2]
 *          list:[ ]
 *      i = 2
 *          list:[3]
 *          helper(rst,list,nums)
 *              i = 0
 *                  list:[3,1]
 *                  helper(rst,list,nums)
 *                      i = 0
 *                          continue;
 *                      i = 1
 *                          list:[3,1,2]
 *                          helper(rst,list,num)
 *                              rst:{[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2]}
 *                              return;
 *                          list:[3,1]
 *                      i = 2
 *                          continue;
 *                  list:[3]
 *              i = 1
 *                  list:[3,2]
 *                  helper(rst,list,nums)
 *                      i = 0
 *                          list:[3,2,1]
 *                          helper(rst,list,num)
 *                              rst:{[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]}
 *                              return;
 *                          list:[3,2]
 *                      i = 1
 *                          continue;
 *                      i = 2
 *                          continue;
 *                  list:[3]
 *              i = 2
 *                  continue;
 *          list:[ ]
 *  
 * 
 * 
 * 
 * 
 */

http://blog.sina.com.cn/s/blog_ad29a69d0102uxcr.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值