基础算法----全排列

实现全排列

今天结合面试题实现一个数组的全排列;git

思路

试想,咱们要对123进行全排列:面试

  1. 咱们能够采用将1固定,“23”进行全排列;
  2. 将“2”固定,对“13”进行全排列;
  3. 将“3”固定,对“12”进行全排列;
  4. 每次固定位置以后,还原置换顺序到以前的状态;

实现

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

结果

全排列结果

源码

http://git.oschina.net/aspnet/Suan-Fa数组

相关文章
相关标签/搜索