zoukankan      html  css  js  c++  java
  • 字符全排列

    题目:输入一个字符串,输出其所有的排列组合。

    思路:分别将每一个字符固定在首位置,然后求后面字符的排列组合,递归的思想。

    代码如下:

    1 void Permutation(char *Str)
    2 {
    3     assert (Str != NULL);
    4 
    5     Permutation (Str, Str);
    6 }
     1 void Permutation(char *Str, char *pTemp)
     2 {
     3     assert (Str != NULL);
     4 
     5     assert (pTemp != NULL);
     6 
     7     if (*pTemp == '\0')
     8     {
     9         printf ("%s\n", Str);
    10 
    11         return;
    12     }
    13 
    14     for (char *pCh = pTemp; *pCh != '\0'; ++pCh)
    15     {
    16         Swap (*pCh, *pTemp);
    17 
    18         Permutation (Str, pTemp + 1);
    19 
    20         Swap (*pCh, *pTemp);
    21     }
    22 }

    利用C++的template写了一个抽象类型的交换两个操作数内容的函数:

     1 template<typename T>
     2 void Swap(T &OperatorA, T &OperatorB)
     3 {
     4     // 这个判断是非常有必要的
     5     // 因为如果要交换的两个数相等
     6     // ,那么用位运算异或之后就都变成了0
     7     // 非但不能交换两个操作数里面的内容,反而破坏了原来的数据,这一点必须避免
     8     if (OperatorA != OperatorB)
     9     {
    10         OperatorA ^= OperatorB;
    11         OperatorB ^= OperatorA;
    12         OperatorA ^= OperatorB;
    13     }
    14 }

    一个测试结果:

  • 相关阅读:
    10、驱动中的阻塞与非阻塞IO
    8、Linux设备驱动的并发控制
    入职一个月考核学习
    5、映射的思考
    6、udev机制
    7、字符设备系统
    linux 内存管理之kmalloc、vmalloc、malloc、get_gree_pages的区别
    嵌入式笔试题(linux基础)
    驱动总结
    系统移植总结
  • 原文地址:https://www.cnblogs.com/ldjhust/p/3056534.html
Copyright © 2011-2022 走看看