📅  最后修改于: 2023-12-03 14:39:49.035000             🧑  作者: Mango
在这个项目中,我们将通过C#代码实现打印给定字符串的所有排列。
字符串的排列指的是将字符串的所有字符重新排列以形成新的字符串,这个新的字符串可能与原字符串不同,但它们的字符都相同。 例如,字符串 "abc" 的排列为 "abc"、“acb”、“bac”、“bca”、“cab”、“cba”。
我们将采用递归的方法来实现打印给定字符串的所有排列。具体步骤如下:
下面是代码实现:
using System;
using System.Collections.Generic;
public class StringPermutation
{
private List<string> results = new List<string>();
public List<string> Permute(string s)
{
if (string.IsNullOrEmpty(s))
{
return results;
}
Permute(s.ToCharArray(), 0);
return results;
}
private void Permute(char[] chars, int start)
{
if (start == chars.Length - 1)
{
results.Add(new string(chars));
return;
}
for (var i = start; i < chars.Length; i++)
{
Swap(chars, start, i);
Permute(chars, start + 1);
Swap(chars, start, i);
}
}
private void Swap(char[] chars, int i, int j)
{
var temp = chars[i];
chars[i] = chars[j];
chars[j] = temp;
}
}
List<string>
类型的变量 results
,用于存储结果。Permute(string s)
方法,它接收一个字符串作为参数,并返回字符串的所有排列。Permute(string s)
方法中,我们首先将输入的字符串转换为字符数组,然后调用 Permute(char[] chars, int start)
方法进行递归处理。Permute(char[] chars, int start)
方法接收两个参数 chars
和 start
,chars
表示当前要处理的字符数组,start
表示已经处理好的字符数量。在递归处理时,我们通过交换位置来对原字符串进行重新排列。start
等于字符数组的长度减一时,即处理完毕,将当前排列加入结果集合中,并返回上一个递归调用。Swap(char[] chars, int i, int j)
方法,其作用是实现交换。var permute = new StringPermutation();
var result = permute.Permute("abc");
foreach (var item in result)
{
Console.WriteLine(item);
}
输出结果为:
abc
acb
bac
bca
cba
cab