程序员面试题精选-- 字符串的组合

字符的全排列、字符的组合 一、字符的全排列 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入描述: 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。 /* 递归法:先固定第一个字符,求剩余字符的排列 递归出口:str中只剩下最后一个字符 如果字符串中有重复的字符... 阅读详情
 
分类: 程序员面试题   5人阅读   评论(0)   收藏   举报

题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。

用递归的思路来求字符串的组合:

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

参考代码:

  1. #include<iostream>  
  2. #include<vector>  
  3. using namespace std;  
  4.   
  5. void Combination(char *str, unsigned int number, vector<char> &result);   
  6.   
  7. void Combination(char *str)  
  8. {  
  9.     if(!str)  
  10.         return;  
  11.           
  12.     unsigned int length = strlen(str);  
  13.     vector<char> result;  
  14.       
  15.     for(int i=1; i<=length; i++)  
  16.     {//依次求 i 个字符组成的序列   
  17.         Combination(str, i, result);  
  18.     }  
  19. }   
  20.   
  21. void Combination(char *str, unsigned int number, vector<char> &result)  
  22. {  
  23.     if(number == 0)  
  24.     {// i 个字符的某个序列已选取完,输出之   
  25.         vector<char>::iterator index = result.begin();  
  26.         for(; index < result.end(); index++)  
  27.         {  
  28.             cout<<*index;  
  29.         }  
  30.         cout<<endl;  
  31.         return;  
  32.     }  
  33.       
  34.     if(*str == '\0')  
  35.         return;  
  36.       
  37.     //把当前字符放入序列中,在剩下的串中选取number-1个字符的序列   
  38.     result.push_back(*str);  
  39.     Combination(str+1, number-1, result);  
  40.     result.pop_back();  
  41.       
  42.     //不把当前字符放入序列中,在剩下的串中选取number个字符的序列  
  43.     Combination(str+1, number, result);  
  44. }  
  45.   
  46.   
  47. int main()  
  48. {  
  49.     char *str = "abcd";  
  50.     Combination(str);  
  51.     system("pause");  
  52.     return 0;  
  53. }  


剑指Offer – 面试题38. 字符串的排列(全排列,排序,回溯+剪枝) 1. 题目 输入一个字符串,打印出该字符串中字符的所有排列。 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。 示例: 输入:s = "abc" 输出:["abc","acb","bac","bca","cab","cba"] 限制: 1 <= s 的长度 <= 8 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/zi-fu-chuan-de-pai-lie-lcof 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 相关题目: LeetCode 46. 全排列(回溯) LeetCode 47. 全排列 I 立即下载

相关推荐

MQL5教程 01 MT5有关EA的操作、MetaEditor 工具栏主要功能

MQL5教程 01 MT5有关EA的操作、MetaEditor 工具栏主要功能

weixin_42830015的博客 3985

如何输出字符串的所有组合

问题:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。 分析:用递归求解。可以考虑求长度为n的字符串中m个字符的组合,设为C(n,m)。原问题的解即为C(n, 1), C(n, 2),...C(n, n)的总和。 对于求C(n,m),从第一个字符开始扫描,每个字符有两种情况,要么被选中,要么不被选中,如果被选中,递归求解C(n-1, m-1)。如果未被选中,递归求解C(n-1, m)。不管哪种方式,n的值都会减少,递归的终止条件n=

weixin_42145502的博客 983

半导体设备上位机开发:我的经验与新人指导

半导体设备上位机开发是一项复杂而富有挑战性的工作,需要扎实的技术基础和丰富的经验。如果你对半导体设备上位机开发感兴趣,欢迎随时与我交流,我会尽力帮助你!

qq_43518667的博客 2729

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

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

重庆李四 1542

【元宵快乐】猜灯谜吃元宵 元气满满闹元宵~(附猜灯谜小游戏)

导语 元宵节,又称上元节、灯节,是春节之后的第一个重要节日。 相传,汉文帝(前179—前157年)为庆祝周勃于正月十五勘平诸吕之乱,每逢此夜,必出宫游玩,与民 同乐,在古代,夜同宵,正月又称元月,汉文帝就将正月十五定为元宵节。 随着社会和时代的变迁,元宵节的风俗习惯在不断变化,但至今仍是中国的传统节日。2008年, 元宵节选入第二批国家级非物质文化遗产。 对我而言,除了吃元宵、看花灯……还有一件最重要的事情…就是… 猜灯谜!猜灯谜!!猜灯谜!!!猜谜事小,展现聪明才智事大哈哈哈.jpg .

顾木子吖的博客 2099

SAP MM新手避坑指南:工厂间调拨用301还是303?手把手教你选对移动类型

本文深入解析SAP MM模块中工厂间调拨的301与303移动类型,帮助新手避开常见陷阱。通过对比一步法(301)和两步法(303+305)的核心差异、适用场景及财务影响,提供清晰的决策框架和实战技巧,确保库存调拨的准确性和效率。

weixin_29223603的博客 346

求字符组的所有排列组合方式

今天看到群里有人留言问了一个关于算法的问题,问题是如何获得 一个字符串 "ABCDEF" 的所有不同组合; 午休时间就写了个方法,代码还是热乎着的呢,呵呵~顺带着也扩展了下,满足固定的前缀,和不定长度的字符,代码如下: View Code 1 /// <summary> 2 /// 字符排列组合 3 /// </summa...

weixin_30454481的博客 626

【学长笔记】点亮 STM32F411CEU6 板载 LED —— 入门级教程

本文提供了STM32F411CEU6开发板(Black Pill)点亮LED的完整教程。详细介绍了硬件信息(板载LED连接PC13,低电平有效)、CubeMX配置步骤(GPIO输出模式)、Keil5工程设置及完整代码实现(包含GPIO初始化和系统时钟配置)。教程还涵盖ST-Link下载器连接方法、程序下载步骤(需配合BOOT0按键操作)以及验证程序运行的方法。该教程特别适合STM32初学者,通过简单的LED闪烁示例快速入门STM32开发。

apple_53308981的博客 1322

大厂面试题目 - String中字符排列组合相关面试题目

面试题目 - String 相关 输入一个字符串,打印输出该字符串中字符的所有排列。你可以任意顺序返回这个字符串数组,但里面不能有重复元素。 示例: 输入: s = “abc”; 输出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”] 限制:1 <= s 的长度 < = 8 import java.util.Arrays; import java.u...

百知_zmj的博客 484

车载以太网:PHY(物理层)介绍

本文以TJA1101芯片为实例介绍了车载以太网PHY(物理层)组成。

kevin1499的博客 6231

AMBA-CHI协议详解(十)

该规范提供了一个Request Retry(请求重试)机制,确保当请求到达一个Completer 时,它要么被接受,要么被给予一个RetryAck响应,以防止阻塞REQ通道。

Crazzy_M的博客 986

程序员面试题精选100题-字符串的组合[算法]

题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。 分析:在本系列博客的第28题《字符串的排列》中,我们详细讨论了如何用递归的思路求字符串的排列。同样,本题也可以用递归的思路来求字符串的组合。 假设我们想在长度为n的字符串中求m个字符的组合。我们先从头扫描字符串的第一个字符。针对第一个字符,我们有两种选择:一是

u012226625的专栏 865

【脑肿瘤分类与迁移学习技术】Swin UNETR:当 Swin Transformer 遇见 3D 医学图像分割——从黑盒到白盒的逐层拆解

医学图像分割的终极目标是让算法成为医生的可靠副手,而非黑箱替代品。理解 Swin UNETR 的每一层如何流动、每一个窗口如何移位、每一次拼接如何融合,不仅是为了调参,更是为了在临床场景中。

u012133341的博客 55

程序员面试题精选100题(59)-字符串的组合[算法]

题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。 分析:在本系列博客的第28题《字符串的排列》中,我们详细讨论了如何用递归的思路求字符串的排列。同样,本题也可以用递归的思路来求字符串的组合。 假设我们想在长度为n的字符串中求m个字符的组合。我们先从头扫描字符串的第一个字符。针对第一个字符,我们有两种选择:一是

GarfieldEr007的专栏 2261

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

程序员面试题精选100题(59)-字符串的组合

http://zhedahht.blog.163.com/blog/static/2541117420114172812217/ 题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。 分

天道酬勤! 738

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

面试题 字符串的所有组合

在求一个字符串中所有字符的组合的时候,针对一个字符,有两种情况,假设在长度为n的字符串中选择长度为m的组合字符串, 第一是选择长度为n的字符串中的第一个字符,那么要在其余的长度n-1的字符串中选择m-1个字符 第二是不选择长度为n的字符串中的第一个字符,那么要在其余的长度n-1的字符串中选择m个字符 递归结束的条件就是,当m为0,即从字符串中不再选出字符的时候,这个时候已经找到了m个字符的组...

weixin_30834783的博客 168

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

面试题28—相关题目(字符所有的组合)

题目:求字符的所有组合。 代码示例: #include #include #include #include using namespace std; void Combination(char *string, int number, vector &result); void Combination(char *string) { assert(string !=

seu_nuaa_zc的博客 261

剑指Offer面试题28及其扩展:求字符的所有组合

题目描述: 如果不是求字符的所有排列,而是求字符的所有组合。比如,输入三个字符a,b,c,则它们的组合有a,b,c,ab,ac,bc,abc。当交换字符串中的两个字符时,虽然能得到两个不同的排列,但却是同一个组合,比如ab和ba是不同的排列,但只算一个组合 思路分析: 如果输入n个字符,则这n个字符能构成长度为1的组合,长度为2的组合,……..,长度为n的组合。在求n个字符长...

Just The Way You Are 967

组合问题, 给定字符集,输出特定长度的字符组合。

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33798152的博客 218

《剑指Offer》面试题:字符串的组合(不用递归求解)

剑指offer上的拓展题目 输入一个字符串,输出该字符串的字符的所有组合 比如输入字符串:abc,输出a、b、c、ab、ac、bc、abc。 思路 由于需要输出字符串的所有组合情况,在这里不用递归来进行求解。 这里采用另外一个方法来求解,我们开辟一个与字符串等长的int类型的数组,数组中的元素只能非0即1两种情况,当数组中某位的元素为1时,则字符串中对应的那位参与了组合;如果为0

wojiushimogui的博客 897

Leetcode exercise record --- STRING 9 exercises

????Leetcode exercise record???? STRING 9 exercises ****刷题小结**** 1.万事开头难,坚持刷题进度,加油,会越来越好 2.双端队列 3.逆序调用 4.动态数组,vector 6.循环 -数组处理:翻倍数组 7.求余,push前赋值 8.其他单调栈问题待练习,496,901,42,84 文章目录????Leetcode exercise record???? STRING 9 exercises151. 翻转字符串里的单词 ❓???? MEDIUM

yana的博客 790

字符排列组合求解

import java.util.Arrays; import java.util.LinkedList; import java.util.List; /** * Author:YeBing * 字符排列组合求解 */ public class StringSort { private static int COUNT=0; public void...

weixin_30535843的博客 178
上一篇: 程序员智力题
下一篇: http://blog.sina.com.cn/s/blog_7ed3ed3d01018pbd.html
robertin
博客等级 码龄16年 11粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值