求字符串的全排列的递归实现(对字符串中有相同字符也适用)
题目:输入一个字符串,打印出该字符串中字符的所有排列。接着上一篇,但此代码对字符串中有相同字符也同样能正确输出结果。
例如:输入字符串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;
}
输出如下:
求字符串的全排列的递归实现(对字符串中有相同字符也适用)相关推荐
- C语言之字符串探究(十):递归逆置字符串
相关博文:C++之char和string字符串类探究 相关博文:C语言之数组探究(一):定义.大小.初始化.访问和三要素 相关博文:C语言之字符串探究(一):字符串与字符数组 相关博文:C语言之字符串 ...
- 算法练习day15——190403(简介、求n!、汉诺塔、打印字符串的子序列、打印字符串的全排列、母牛生小牛、最小路径和、累加和是否达到给定值)
1. 简介 动态规划是为了优化暴力尝试的. 2. 求n! 2.1 一般思路 public static long getFactorial2(int n) {long result = 1L;for ...
- 算法学习——求有重复元素的全排列(递归)
算法学习--求有重复元素的全排列(递归) 思路:看到这个题目首先能想到的一点就是:①我们要求元素的所有全排列②我们要对求出的全排列去重 第一步:求全排列,这里先讨论对不含重复元素的数组元素进行全排列, ...
- 字符串的全排列和组合算法
转载http://blog.csdn.net/hackbuteer1/article/details/7462447,感谢Hackbuteer1. 全排列在笔试面试中很热门,因为它难度适中,既可以考察 ...
- python3数字全排列怎么搞_python3实现字符串的全排列的方法(无重复字符)
最近在学一些基础的算法,发现我的数学功底太差劲了,特别是大学的这一部分,概率论.线性代数.高数等等,这些大学学的我是忘得一干二净(我当时学的时候也不见得真的懂),导致现在学习算法,非常的吃力.唉!不说 ...
- python基础入门:实现(无重复字符)字符串的全排列的两种方法
求任意一个字符串的全排列组合,例如a='123',输出 123,132,213,231,312,321.(暂时假定字符串没有重复) 目前有两种解决的方法 方法一: def str_sort(s='') ...
- python3实现字符串的全排列的方法(无重复字符)
抛出问题 求任意一个字符串的全排列组合,例如a='123',输出 123,132,213,231,312,321.(暂时假定字符串没有重复) 解决方案 目前有两种解决的方法 方法一: def str_ ...
- 字符串的全排列JAVA实现
package com.kpp;/*** 求字符串的全排列* 递归的思想* 比如 abcde 先求出abcd的全排列,然后将e分别插入全排列的5个位置* a 全排列 a* ab 全排列 ab ba* ...
- 算法基础2:求abc的全排列
算法基础:求abc的全排列有几种方式 采用递归的方式,对abc的排列进行解析 先上代码块: public class Demo2 {public static void main(String[] a ...
最新文章
- AI又被彩虹吹!​网易被预言为“下一个百度”?
- Navicat Premium 未保存和已执行SQL存储位置
- 【Git】GitHub主页从Dark调回Light的方法
- 解决Shockwave flash在谷歌浏览器上崩溃的问题
- 下载Bootstrap3
- ethtool的内核流程跟踪
- DisSent: Learning Sentence Representations from Explicit Discourse Relations
- Caffe傻瓜系列(5):Blob,Layer and Net以及对应配置文件的编写
- Udacity数据分析(入门)-TMDb电影数据集探索
- 生物信息学常用软件—2(PCR引物设计及相关软件使用)
- 安卓 视频直播二:推流端代码
- 数据分析面试之——【群面面经】注意事项与技巧总结
- 单应性矩阵的理解及求解
- Unity Remote5 使用
- 表白神器java代码_java制作七夕表白神器的方法
- 请问苹果x是如何建文件夹_苹果x怎么创建文件夹相关阅读-苹果x怎么创建文件夹文章阅读-123文学网...
- Python 跑深度学习遇到的一些问题集锦
- java中的守护线的应用_JVM中的守护线程示例详解
- 对传统优化算法的一些总结(上)
- mysql修改表前缀操作步骤
热门文章
- NuttX 任务管理
- 微星超龙显卡的性能模式无法开机的原因与解决办法
- 解决jmeter5.4.3在高分辨率下的显示问题
- 苹果与希捷 到底谁的错
- [MacBook Pro] 错误提示zsh_ command not found_ brew
- 大写日期(大写日期10月前要写0吗)
- fMRI与MRI区别+名词解释+MRI中T1和T2的含义与区分
- unity开发 HTC vive手柄控制 手柄上各个按钮的点击事件
- 共享虚拟机是什么意思_苹果笔记本电脑MacBook双系统or虚拟机选择指南
- Realtek 2.5G PCIE网卡 RTL8125B-CG支持PXE免驱简介