# Permutation# Sorting# Backtracking

e942 - pC. 數字排列

🔗 前往 ZeroJudge 原題

題目描述

題目要求給定 N 個相異的正整數,輸出所有可能的排列組合,且排列組合需按照數字大小順序輸出。

解題思路

本題的核心在於產生所有可能的排列組合。可以使用 std::sort 先將輸入的數字排序,然後使用 std::next_permutation 產生下一個排列組合,直到沒有新的排列組合為止。next_permutation 函數會直接修改輸入的序列,並返回一個布林值,表示是否成功產生了下一個排列組合。

複雜度分析

  • 時間複雜度: O(N! * N)
  • 空間複雜度: O(N)

程式碼

#include <iostream>
#include <algorithm>
using namespace std;
int main(){
	cin.tie(0); ios::sync_with_stdio(false);
	int n;
	cin >> n;
	long long int a[n];
	for(int i=0;i<n;++i)
		cin >> a[i];
	sort(a,a+n);
	do{
		for(int i=0;i<n;++i)
			cout << a[i] << " ";
		cout << "\n";
	}while(next_permutation(a,a+n));
}

Discussion