题目:输入一个字符串,打印出该字符串中字符的所有排列。接着上一篇,但此代码对字符串中有相同字符也同样能正确输出结果。

例如:输入字符串abbc,则打印出由字符a、b、c所能排列出来的所有字符串abbc、abcb、acbb、babc、bacb、bbac、bbca、bcba、bcab、cbba、cbab、cabb。

相比于字符串中所有字符都不相同的情况,这时只需要增加一个函数,在对字符串中两个字符交换之前,先判断这两个字符是否相同,若相同,则不交换。

#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;//另一种实现:改进版,字符串中有相同字符,仍能正确输出全排列数。
bool isSwap(char* pStr, int nBegin, int nEnd) //这个函数是判断字符串中要交换的这两个字符是否相同
{for (int i = nBegin; i < nEnd;++i){if (pStr[i]==pStr[nEnd]){return false;}}return true;
}void perm(char* pStr, int i, int n)
{char temp;if (i==n){printf("%s\n", pStr);}else{for (int j = i; j <= n;++j){if (isSwap(pStr,i,j)){temp = pStr[i];pStr[i] = pStr[j];pStr[j] = temp;perm(pStr, i + 1, n);temp = pStr[i];pStr[i] = pStr[j];pStr[j] = temp;}}}
}int main()
{char ptr[] = "abbc"; //这里传参数的时候要注意,如果想改变传入的字符串,就要以字符数组的形式传进去,这样对数组中的内容可以操作。                                                                                                                                                perm(ptr, 0, strlen(ptr) - 1);system("pause");return 0;
}

输出如下:

求字符串的全排列的递归实现(对字符串中有相同字符也适用)相关推荐

  1. C语言之字符串探究(十):递归逆置字符串

    相关博文:C++之char和string字符串类探究 相关博文:C语言之数组探究(一):定义.大小.初始化.访问和三要素 相关博文:C语言之字符串探究(一):字符串与字符数组 相关博文:C语言之字符串 ...

  2. 算法练习day15——190403(简介、求n!、汉诺塔、打印字符串的子序列、打印字符串的全排列、母牛生小牛、最小路径和、累加和是否达到给定值)

    1. 简介 动态规划是为了优化暴力尝试的. 2. 求n! 2.1 一般思路 public static long getFactorial2(int n) {long result = 1L;for ...

  3. 算法学习——求有重复元素的全排列(递归)

    算法学习--求有重复元素的全排列(递归) 思路:看到这个题目首先能想到的一点就是:①我们要求元素的所有全排列②我们要对求出的全排列去重 第一步:求全排列,这里先讨论对不含重复元素的数组元素进行全排列, ...

  4. 字符串的全排列和组合算法

    转载http://blog.csdn.net/hackbuteer1/article/details/7462447,感谢Hackbuteer1. 全排列在笔试面试中很热门,因为它难度适中,既可以考察 ...

  5. python3数字全排列怎么搞_python3实现字符串的全排列的方法(无重复字符)

    最近在学一些基础的算法,发现我的数学功底太差劲了,特别是大学的这一部分,概率论.线性代数.高数等等,这些大学学的我是忘得一干二净(我当时学的时候也不见得真的懂),导致现在学习算法,非常的吃力.唉!不说 ...

  6. python基础入门:实现(无重复字符)字符串的全排列的两种方法

    求任意一个字符串的全排列组合,例如a='123',输出 123,132,213,231,312,321.(暂时假定字符串没有重复) 目前有两种解决的方法 方法一: def str_sort(s='') ...

  7. python3实现字符串的全排列的方法(无重复字符)

    抛出问题 求任意一个字符串的全排列组合,例如a='123',输出 123,132,213,231,312,321.(暂时假定字符串没有重复) 解决方案 目前有两种解决的方法 方法一: def str_ ...

  8. 字符串的全排列JAVA实现

    package com.kpp;/*** 求字符串的全排列* 递归的思想* 比如 abcde 先求出abcd的全排列,然后将e分别插入全排列的5个位置* a 全排列 a* ab 全排列 ab ba* ...

  9. 算法基础2:求abc的全排列

    算法基础:求abc的全排列有几种方式 采用递归的方式,对abc的排列进行解析 先上代码块: public class Demo2 {public static void main(String[] a ...

最新文章

  1. AI又被彩虹吹!​网易被预言为“下一个百度”?
  2. Navicat Premium 未保存和已执行SQL存储位置
  3. 【Git】GitHub主页从Dark调回Light的方法
  4. 解决Shockwave flash在谷歌浏览器上崩溃的问题
  5. 下载Bootstrap3
  6. ethtool的内核流程跟踪
  7. DisSent: Learning Sentence Representations from Explicit Discourse Relations
  8. Caffe傻瓜系列(5):Blob,Layer and Net以及对应配置文件的编写
  9. Udacity数据分析(入门)-TMDb电影数据集探索
  10. 生物信息学常用软件—2(PCR引物设计及相关软件使用)
  11. 安卓 视频直播二:推流端代码
  12. 数据分析面试之——【群面面经】注意事项与技巧总结
  13. 单应性矩阵的理解及求解
  14. Unity Remote5 使用
  15. 表白神器java代码_java制作七夕表白神器的方法
  16. 请问苹果x是如何建文件夹_苹果x怎么创建文件夹相关阅读-苹果x怎么创建文件夹文章阅读-123文学网...
  17. Python 跑深度学习遇到的一些问题集锦
  18. java中的守护线的应用_JVM中的守护线程示例详解
  19. 对传统优化算法的一些总结(上)
  20. mysql修改表前缀操作步骤

热门文章

  1. NuttX 任务管理
  2. 微星超龙显卡的性能模式无法开机的原因与解决办法
  3. 解决jmeter5.4.3在高分辨率下的显示问题
  4. 苹果与希捷 到底谁的错
  5. [MacBook Pro] 错误提示zsh_ command not found_ brew
  6. 大写日期(大写日期10月前要写0吗)
  7. fMRI与MRI区别+名词解释+MRI中T1和T2的含义与区分
  8. unity开发 HTC vive手柄控制 手柄上各个按钮的点击事件
  9. 共享虚拟机是什么意思_苹果笔记本电脑MacBook双系统or虚拟机选择指南
  10. Realtek 2.5G PCIE网卡 RTL8125B-CG支持PXE免驱简介