一、數組全排列輸出
數組全排列是指將給定的數組中的所有元素進行排列組合,輸出所有排列組合的可能性。
#include<bits/stdc++.h>
using namespace std;
void permute(string str, int l, int r)
{
if (l == r)
cout << str << endl;
else
{
for (int i = l; i <= r; i++)
{
swap(str[l], str[i]);
permute(str, l+1, r);
swap(str[l], str[i]);
}
}
}
int main()
{
string str = "ABC";
permute(str, 0, str.length()-1);
return 0;
}
在這個示例中,我們將ABC數組進行排列組合,輸出所有排列組合的可能性。
二、數組全排列C語言
以下是使用C語言進行數組全排列的示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void swap(char *x, char *y)
{
char temp;
temp = *x;
*x = *y;
*y = temp;
}
void permute(char *a, int l, int r)
{
int i;
if (l == r)
printf("%s\n", a);
else
{
for (i = l; i <= r; i++)
{
swap((a + l), (a + i));
permute(a, l + 1, r);
swap((a + l), (a + i));
}
}
}
int main()
{
char str[] = "ABC";
int n = strlen(str);
permute(str, 0, n - 1);
return 0;
}
三、數組全排列 Python
以下是使用Python進行數組全排列的示例:
def permute(data, i, length):
if i == length:
print(''.join(data) )
else:
for j in range(i, length):
# swap
data[i], data[j] = data[j], data[i]
permute(data, i + 1, length)
data[i], data[j] = data[j], data[i]
string = "ABC"
n = len(string)
data = list(string)
permute(data, 0, n)
四、數組全排列遞歸算法
下面是數組全排列的遞歸算法實現:
#include <stdio.h>
#define swap(a, b) (a ^= b, b ^= a, a ^= b)
void perm(int list[], int k, int m)
{
int i;
if (k == m)
{
for (i = 0; i <= m; i++)
printf("%d ", list[i]);
printf("\n");
}
else
{
for (i = k; i <= m; i++)
{
swap(list[k], list[i]);
perm(list, k + 1, m);
swap(list[k], list[i]);
}
}
}
int main()
{
int i, list[] = {1, 2, 3, 4, 5};
perm(list, 0, 4);
return 0;
}
五、數組全排列 Golang
以下是使用Golang進行數組全排列的示例:
package main
import "fmt"
func permute(nums []int) [][]int {
var backtrack func(first int)
res := [][]int{}
backtrack = func(first int) {
if first == len(nums) {
tmp := make([]int, len(nums))
copy(tmp, nums)
res = append(res, tmp)
}
for i := first; i < len(nums); i++ {
nums[first], nums[i] = nums[i], nums[first]
backtrack(first + 1)
nums[first], nums[i] = nums[i], nums[first]
}
}
backtrack(0)
return res
}
func main() {
nums := []int{1, 2, 3}
fmt.Println(permute(nums))
}
六、全排列的公式
全排列的公式為:P(n,m) = n! / (n-m)!,其中n表示總數,m表示選出的數的個數。
七、全排列算法
全排列算法可以分為遞歸算法和非遞歸算法。遞歸算法的基本思想是:將n個不同的元素劃分為一個元素和其餘元素兩個集合,然後求出其餘元素的全排列。非遞歸算法則藉助於棧結構來實現。
八、JS實現全排列
以下是使用JS實現數組全排列的示例:
function permute(nums) {
var backtrack = function(first) {
if (first === nums.length) {
res.push(nums.slice());
}
for (var i = first; i < nums.length; i++) {
[nums[first], nums[i]] = [nums[i], nums[first]];
backtrack(first + 1);
[nums[first], nums[i]] = [nums[i], nums[first]];
}
};
var res = [];
backtrack(0);
return res;
}
var nums = [1, 2, 3];
console.log(permute(nums));
總結
本文為大家介紹了數組全排列的多種實現方式,包括了C語言、Python、Golang、JS等不同語言的實現方法。同時,本文還介紹了全排列的公式以及算法分類。希望這篇文章能夠幫助到正在學習數組全排列的開發者們,為大家的學習和研究提供一些幫助。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/259547.html
微信掃一掃
支付寶掃一掃