60. 排列序列https://leetcode.cn/problems/permutation-sequence/
给出集合 [1,2,3,...,n]
,其所有元素共有 n!
种排列。
按大小顺序列出所有排列情况,并一一标记,当 n = 3
时, 所有排列如下:
"123"
"132"
"213"
"231"
"312"
"321"
给定 n
和 k
,返回第 k
个排列
示例 1:
输入:n = 3, k = 3 输出:"213"示例 2:
输入:n = 4, k = 9 输出:"2314"示例 3:
输入:n = 3, k = 1 输出:"123"
这道题其实就和全排列问题差不多,不作过多解释,直接上代码。
#include<stdio.h>
//类似全排列问题,加个判断条件,输出第几行就行
void swap(int num[],int i, int p)
{
int tmp = num[i];
num[i] = num[p];
num[p] = tmp;
}
void jiaohuan(int n, int num[], int p, int q)
{
if(p == q)
{
for(int i=0; i<q; i++)
{
printf("%d",num[i]);
}
printf("\n");
}
for(int i=p; i<q; i++)
{
swap(num,i,p);
jiaohuan(n-1, num, p+1, q);
swap(num,i,p);
}
}
int main()
{
int num[] = {1, 2, 3, 4};
jiaohuan(4, num, 0, 4);
}