全排列输出(主流语言递归实现)

本文最后更新于:9 个月前

vscode是一个外表很高冷的姑娘,你需要对她投入很多,她才会慢慢接纳你。她是一个善良却保守的姑娘,每一次你提出新要求时,都需要折腾折腾她一波,她才能同意你。

推荐使用vscode写代码,强大的插件生态给你飞一样地体验!

递归图解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// C Call
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int num = 0;

void swap(char *a, char *b)
{
char temp = *a;
*a = *b;
*b = temp;
}

void whole_arrangement(char ch[], int k, int len)
{
int i;
if (k == len)
{
printf("%s", ch);
num++;
printf(", ");
return;
}
else
{
for (i = k; i <= len; i++)
{
swap(&ch[k], &ch[i]);
whole_arrangement(ch, k + 1, len);
swap(&ch[k], &ch[i]);
}
}
}

int main()
{
char ch[] = "abc";
whole_arrangement(ch, 0, strlen(ch) - 1);
printf("\nCOUNT: %d\n", num);
system("pause");
return 0;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// Java Call
// Main.java
public class Main {
public static void main(String[] args) {
String ch = "abc";
wholeArrangement(ch.toCharArray(), 0);

}

public static void wholeArrangement(char[] ch, int k) {
int i;
if (k == ch.length - 1) {
System.out.print(ch);
System.out.print(", ");
return;
} else {
for (i = k; i <= ch.length - 1; i++) {
char temp = ch[k];
ch[k] = ch[i];
ch[i] = temp;
wholeArrangement(ch, k + 1);
temp = ch[k];
ch[k] = ch[i];
ch[i] = temp;
}
}
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# python Call
from typing import List


def whole_arrangement(ch: List[str], k: int) -> None:
if k == len(ch):
print("".join(ch), end='')
print(", ", end='')
return
else:
for i in range(k, len(ch)):
temp = ch[k]
ch[k] = ch[i]
ch[i] = temp
whole_arrangement(ch, k+1)
temp = ch[k]
ch[k] = ch[i]
ch[i] = temp


def main() -> None:
ch = "abcde"
whole_arrangement(list(ch), 0)


if __name__ == "__main__":
main()


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!