程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> leetcode--Permutations(打印所有排列)

leetcode--Permutations(打印所有排列)

編輯:C++入門知識

Problem Description:

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].

思路分析:

利用遞歸性質,先固定一個數,然後對剩下的數進行排列,直到剩下最後一個數,形成一個排列,循環將當前數字與剩下的數依次交換後再遞歸,直到遞歸結束。

代碼如下:

class Solution {
public:

    void swap(int &a,int &b)
    {
        int temp=a;
        a=b;
        b=temp;
    }
    
    void permutations(vector num,int begin,vector &permutation,vector > &res)
    {
        if(begin==num.size())
        {
            res.push_back(permutation);
            return;
        }
        for(vector::size_type index=begin;index!=num.size();++index)
        {
            
            swap(num[begin],num[index]);
            permutation.push_back(num[begin]);
            permutations(num,begin+1,permutation,res);
            permutation.pop_back();
            swap(num[begin],num[index]);         
        }
    }

    vector > permute(vector &num) {
        vector > res;
        if(num.empty())
            return res;
        vector permutation;
        permutations(num,0,permutation,res);
        return res;
    }
};


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved