设为首页 加入收藏

TOP

LeetCode --- 46. Permutations
2015-07-20 17:13:59 来源: 作者: 【 】 浏览:3
Tags:LeetCode --- 46. Permutations

题目链接:Permutations

Given a collection of numbers, return all possible permutations.

For example,

[1,2,3] have the following permutations: 
[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], and [3,2,1]. 

这道题的要求是给定一组数字,生成所有的排列组合。

1. 递归排列

这是一个排列的问题,首先联想到的就是递归方式。每次逐个固定每个元素到第一位置,然后递归排列剩下的元素。当固定到前面的元素数量等于数组长度的时候,递归终止。

时间复杂度:O(n!)(结果数量)

空间复杂度:O(n!)

 1 class Solution
 2 {
 3 public:
 4     vector
   
     > permute(vector
    
      &num) 5 { 6 vector
     
       > vvi; 7 permute(num, 0, vvi); 8 return vvi; 9 } 10 private: 11 void permute(vector
      
        &num, int i, vector
       
         > &vvi) 12 { 13 if(i == num.size()) 14 { 15 vvi.push_back(num); 16 return; 17 } 18 for(int j = i; j < num.size(); ++ j) 19 { 20 swap(num[i], num[j]); 21 permute(num, i + 1, vvi); 22 swap(num[i], num[j]); 23 } 24 } 25 };
       
      
     
    
   

2. next_permutation

其实还可以利用next_permutation()函数,逐步生成下一个排列。由于next_permutation()在最后一个排列时返回false,因此可以先对数组排序,然后调用next_permutation()直到其返回false。

时间复杂度:O(n!)(结果数量)

空间复杂度:O(n!)

 1 class Solution
 2 {
 3 public:
 4     vector
   
     > permute(vector
    
      &num) 5 { 6 sort(num.begin(), num.end()); 7 8 vector
     
       > vvi({num}); 9 while(next_permutation(num.begin(), num.end())) 10 vvi.push_back(num); 11 12 return vvi; 13 } 14 };
     
    
   

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇hdu 1085 Holding Bin-Laden Capt.. 下一篇BZOJ 2326 HNOI 2011 数学作业 矩..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·【C语言】动态内存管 (2025-12-27 06:23:20)
·C语言中的内存管理 - (2025-12-27 06:23:16)
·C语言指南:C语言内 (2025-12-27 06:23:14)
·Redis on AWS:Elast (2025-12-27 04:19:30)
·在 Spring Boot 项目 (2025-12-27 04:19:27)