面试经典(22)---字符串组合

2023-11-10

题目:输入一个字符串,输出该字符串中字符的所有组合。

举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。

假设我们想在长度为n的字符串中求m个字符的组合。我们先从头扫描字符串的第一个字符。针对第一个字符,我们有两种选择:一是把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选取m-1个字符;而是不把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选择m个字符。这两种选择都很容易用递归实现。下面是这种思路的参考代码:

    由于组合可以是1个字符的组合,2个字符的字符……一直到n个字符的组合,因此在函数void Combination(char* string),我们需要一个for循环。另外,我们一个vector来存放选择放进组合里的字符。

void Combination(char *string)  
{  
   if(string==NULL)
	   return;
   vector<char> result;  
    int i , length = strlen(string);  
    for(i = 1 ; i <= length ; ++i)  
        Combination(string , i ,result);  
}  
 
void Combination(char *string ,int number , vector<char> &result)  
{  
	if(strlen(string)<number)
		return;
    if(number == 0)  
    {  
        static int num = 1;  
        printf("第%d个组合\t",num++);  
 
        vector<char>::iterator iter = result.begin();  
        for( ; iter != result.end() ; ++iter)  
           printf("%c",*iter);  
        printf("\n");  
        return ;  
    }  
    if(*string == '\0')  
        return ;  
    result.push_back(*string);  
    Combination(string + 1 , number - 1 , result);  
    result.pop_back();  
    Combination(string + 1 , number , result);  
}  


修改:添加if(strlen(string)<number) return。举例:假如要从abc中取长度为3的组合,一眼看到只有一种情况:abc,但是不加剪枝会比较慢。首先abc选入得到abc输出,然后递归回溯不选c,不选b,不选a,计算会层层递归到‘\0'才知道返回,我们如果判定字符串长度小于number,那么直接返回会节省不少时间。比如当回溯到不选a时,进入到conbination("bc,3,result),可提前返回,如果没有剪枝条件,算法还会继续递归。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面试经典(22)---字符串组合 的相关文章

  • 用python实现二分查找(折半查找)

    文章目录 一 算法简介 二 算法思路 三 具体编码 一 算法简介 折半查找又叫二分查找 要求线性表必须采用顺序存储结构 而且表中元素按关键字有序排列 升序或者降序 时间复杂度 O log2n 每次循环都会舍弃一半的查找空间 空间复杂度 O
  • 利用读时建模等数据分析能力,实现网络安全态势感知的落地

    摘要 本文提出一种基于鸿鹄数据平台的网络安全态势感知系统 系统借助鸿鹄数据平台读时建模 时序处理 数据搜索等高效灵活的超大数据存储和分析处理能力 支持海量大数据存储 分类 统计到数据分析 关联 预测 判断的网络安全态势感知能力需求 以安全大
  • HttpRequest中常见的四种ContentType

    HTTP 1 1 协议规定的 HTTP 请求方法有 OPTIONS GET HEAD POST PUT DELETE TRACE CONNECT 这几种 其中 POST 一般用来向服务端提交数据 本文主要讨论 POST 提交数据的几种方式
  • python中的GIL详解

    python中的GIL详解 参考Python GIL 锁简述 GIL是什么 首先需要明确的一点是GIL并不是Python的特性 它是在实现Python解析器 CPython 时所引入的一个概念 就好比C 是一套语言 语法 标准 但是可以用不
  • mysql启动失败:mysql服务无法启动 服务没有报告任何错误 解决方法

    1 一开始无法启动时因为mysql安装目录下我没有Data文件夹 而我的my ini文件通过查找默认在C ProgramData MySQL MYSQL Server 8 0于是参考mysql无法启动 服务没有报任何错误 进行了如下部分更改
  • 游戏开发物理引擎PhysX研究系列:学习链接

    参考 基础介绍 原 译 physX phsyX3 3 4官方文档物理引擎基本概念和例子介绍 如何使用官方自带的demo Nvidia PhysX 学习文档2 Snippets PhysX 物理引擎研究 一 源码编译 在 Net平台使用Phy

随机推荐

  • 码云使用pull request出现无法合并

    在使用码云的时候 常常会因为各种各样的原因而出现冲突这里就来讲一下如何解决 再做第一步之前先把你要上传的文件copy出来然后解决冲突后再把他们扔进去上传 那第一步先来查看我们的源 git remote v 那么很明显我这里有一个origin
  • 非root用户-elastic-stack日志收集系统的规划及部署

    架构图 192 168 140 17 ELK 1 4核 8G 250G centos7 8 ES1 kibana 192 168 140 18 ELK 2 4核 8G 250G centos7 8 ES2 192 168 140 19 EL
  • 【数据结构】图的实现

    文章目录 图 1 图的基本概念 2 图的存储结构 3 邻接矩阵 3 1邻接矩阵的优缺点 3 2邻接矩阵的实现 4 邻接表 4 1邻接表的实现 5 图的遍历 5 1广度优先遍历 5 2深度优先遍历 5 3如何遍历不连通的图 图 1 图的基本概
  • Verilog学习记录3——三目运算符

    三目运算符 三目运算符 assign a b c d 等同于 if b true a c else a d 进阶示例 以牛客网 VL1 四选一多路器 为例 timescale 1ns 1ns module mux4 1 input 1 0
  • ML-Agents案例之双人足球

    本案例源自ML Agents官方的示例 Github地址 https github com Unity Technologies ml agents 本文是详细的配套讲解 本文基于我前面发的两篇文章 需要对ML Agents有一定的了解 详
  • Java的测试方法有哪些?自动化测试让Java测试变得更简单!

    Java现在是后端和前端开发项目中使用最广泛的服务器端语言之一 凭借如此庞大的活跃社区 Java 多年来一直保持着世界三大最受欢迎编程语言的地位 Java 之所以如此成功 是因为它的技术标准在不断发展 而且 Java 将在没有强大竞争对手的
  • iOS App 连接外设的几种方式

    原创作者 Max Marry 文章地址 http www jianshu com p 852bf92c5c92 随着近年来车联网和物联网的兴起 智能家居和智能硬件的逐步火热 越来越多的 App 被用来跟硬件设备进行来连接 获取硬件相关信息用
  • Android开发必须掌握!Kotlin可能带来的一个深坑,使用指南

    1 项目介绍 Flutter是目前比较流行的跨平台开发技术 凭借其出色的性能获得很多前端技术爱好者的关注 比如阿里闲鱼 美团 腾讯等大公司都有投入相关案例生产使用 基于Flutter Dart chewie photo view image
  • 聊一聊 Java 中的 ThreadLocal

    前言 本文首发于我的个人博客 http yifanstar top 提到 ThreadLocal Java 开发者并不陌生 在面试中 也经常被面试官提及 对 Java 开发者而言也是一个必须掌握的知识点 所以将它理解透彻是很有必要的 文章稍
  • linux下lpython查版本信息,ln进行python软连接、find、which进行环境变量文件查找、ps进行进程查看、/usr/local/为软件安装主目录-new

    1 查看某个安装包的版本信息指令 python m django version 如果是查看其它安装包的信息则改为其它包名即可 2 ln进行python版本软连接 安装python3 5推荐使用Anaconda 推荐安装到 usr loca
  • 推荐9个最顶级的IT公众号

    固步自封只会让自己落后于他人 如今 网络已将人与人之间的距离拉近 我们应开拓自己的眼界 结识更多的大能来丰富自己的知识 以下是8个技术公众号 每日共享最新的技术资讯 快收下这波安利吧 stormzhang stormzhang 大家都喊他张
  • Python pip install 安装包报错ERROR: Could not find a version that satisfies the requirement XXX解决方法

    Python pip install 安装包报错ERROR Could not find a version that satisfies the requirement XXX解决方法 文章目录 Python pip install 安装
  • 利用arp欺骗获取局域网目标浏览的图片

    之前的实验中实现了arp断网攻击 这是arp欺骗错误配置下产生的现象 所谓arp欺骗 就是在断网攻击的前提下 让流量转发出去 原理 使目标主机认为攻击者的网卡是网关 从而将数据包都发给攻击者的网卡 攻击者的网卡再开启转发 将数据包传到真正网
  • 毕业设计 单片机选题100例(五)

    单片机毕业设计项目分享系列 这里是DD学长 单片机毕业设计及享100例系列的第一篇 目的是分享高质量的毕设作品给大家 包含全面内容 源码 原理图 PCB 实物演示 论文 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的单片机项目缺少
  • 数据结构之优先级队列(堆)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 二叉树的顺序存储 1 存储方式 2 下标关系 二 堆 概念 创建大根堆 三 堆的应用及相关操作 入队列 出队列 得到队头元素 四 Java中的优先级队列 细节问
  • Shell编程:函数的简单应用

    Shell编程是一种在Unix或类Unix系统上进行脚本编程的方法 脚本是一系列命令的集合 用于自动化执行特定任务 在Shell脚本中 函数是一种组织和重用代码的重要方式 函数允许将一段代码片段封装起来 并在需要时进行调用 本文将介绍She
  • MySQL参数sql-mode配置

    一 问题描述 采用Navicat连接mysql 在执行SQL时报错 Err 1055 Expression 1 of ORDER BY clause is not in GROUP BY clause and contains nonagg
  • 贡献30本经典Linux学习和开发教程和资料,都是pdf完整版的

    贡献30本经典Linux学习和开发教程和资料 都是pdf完整版的 字号 订阅 完全免费下载 无需注册也无需积分 pdf版经典Linux学习教程资料列表 电子书 下载链接 单个资源下载 101 深入理解Linux内核 第三版 英文版 1030
  • pandas(一):read_csv解决第一列Unnamed问题

    先直接给答案 configdata pd read csv savepath encoding utf 8 index col 0 然后我们展开来说明 首先下面这个图片是原始csv数据 1 第一列问题 上述图片可以看到 因为csv文件自带第
  • 面试经典(22)---字符串组合

    题目 输入一个字符串 输出该字符串中字符的所有组合 举个例子 如果输入abc 它的组合有a b c ab ac bc abc 假设我们想在长度为n的字符串中求m个字符的组合 我们先从头扫描字符串的第一个字符 针对第一个字符 我们有两种选择