实现全排列
今天结合面试题实现一个数组的全排列;
思路
试想,我们要对123进行全排列:
- 我们可以采用将1固定,“23”进行全排列;
- 将“2”固定,对“13”进行全排列;
- 将“3”固定,对“12”进行全排列;
- 每次固定位置之后,还原置换顺序到之前的状态;
实现
string str = "1234";
#region 全排列
static void allPermutation(char[] arr, int start, int end)
{
if (start == end)
{
for (int i = 0; i < arr.Length; i++)
{
System.Console.Write(arr[i]);
}
System.Console.Write("\n");
}
else
{
for (int i = start; i <= end; i++)
{
swap(arr, i, start);//将某一位置换到第一位固定
allPermutation(arr, start + 1, end);
swap(arr, i, start);//还原上面置换
}
}
}
static void swap(char[] arr, int left, int right)
{
char temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
#endregion