语料库-国产精选一区-提供经典范文,国产精选视频,文案句子,国产精选第一页,常用文书,您的写作得力助手

字符串組合函數模板

網絡整理 分享 時間: 收藏本文

字符串組合函數模板

在日常學習、工作或生活中,大家總少不了接觸作文或者范文吧,通過文章可以把我們那些零零散散的思想,聚集在一塊。范文怎么寫才能發揮它最大的作用呢?接下來小編就給大家介紹一下優秀的范文該怎么寫,我們一起來看一看吧。

字符串組合函數篇一

題目:輸入一個字符串,輸出該字符串中字符的所有組合。舉個例子,如果輸入abc,它的組合有a、b、c、ab、ac、bc、abc。

上面我們詳細討論了如何用遞歸的思路求字符串的排列。同樣,本題也可以用遞歸的思路來求字符串的組合。

假設我們想在長度為n的字符串中求m個字符的組合。我們先從頭掃描字符串的第一個字符。針對第一個字符,我們有兩種選擇:第一是把這個字符放到組合中去,接下來我們需要在剩下的n-1個字符中選取m-1個字符;第二是不把這個字符放到組合中去,接下來我們需要在剩下的n-1個字符中選擇m個字符。這兩種選擇都很容易用遞歸實現。下面是這種思路的參考代碼:

#include#include#includeusing namespace std;#includevoid combination(char *string ,int number,vector&result);void combination(char *string){ assert(string != null); vectorresult; int i , length = strlen(string); for(i = 1 ; i <= length ; ++i) combination(string , i ,result);}void combination(char *string ,int number , vector&result){ assert(string != null); if(number == 0) { static int num = 1; printf("第%d個組合t",num++); vector::iterator iter = (); for( ; iter != () ; ++iter) printf("%c",*iter); printf("n"); return ; } if(*string == ') return ; _back(*string); combination(string + 1 , number - 1 , result); _back(); combination(string + 1 , number , result);}int main(void){ char str[] = "abc"; combination(str); return 0;}

由于組合可以是1個字符的組合,2個字符的字符……一直到n個字符的組合,因此在函數void combination(char* string),我們需要一個for循環。另外,我們用一個vector來存放選擇放進組合里的`字符。

用位運算來實現求組合

#includeusing namespace std;int a[] = {1,3,5,4,6};char str[] = "abcde";void print_subset(int n , int s){ printf("{"); for(int i = 0 ; i < n ; ++i) { if( s&(1<<i) ) ? // 判斷s的二進制中哪些位為1,即代表取某一位 printf("%c ",str[i]); //或者a[i] } printf("}n");}void subset(int n){ for(int i= 0 ; i < (1<<n) ; ++i) { print_subset(n,i); }}int main(void){ subset(5); return 0;}

全組合

例如給定字符串“abc”,全組合意思從中去0個元素,1個元素,一直到n個元素,介紹二進制做法。以字符串“abc”為例:

000 <---> null

001 <---> c

010 <---> b

011 <---> bc

100 <---> a

101 <---> ac

110 <---> ab

111 <---> abc

思路出來了,代碼也比較好寫,分享一下我的代碼:

/** ?* write a method that returns all subsets of a set ?*/ ? #include#include#include/** ?* 通過0到2^-1來標識子集 ?* ?* t = (n * 2^n) ?* ?*/ ?void getsubset(char *str, int len) ?{ ? int i, max, index, j; ? ?max = 1 << len; ? ?for (i = 1; i < max; i ++) { ? ?j = i; ? ?index = 0; ? ? while (j) { ? ? if (j & 1) { ? ? ?printf("%c", str[index]); ? ? } ? ? j >>= 1; ? ? index ++; ? ?} ? ?printf("n"); ? } ?} ? int main(void) ?{ ? char str[1000]; ? ?while (scanf("%s", str) != eof) { ? ?getsubset(str, strlen(str)); ? ?} ? ?return 0; ?}

從n中選m個數

這里分為兩種方法:遞歸和回溯

遞歸

遞歸思路如下,從n個數中取出m個數,可以分解為以下兩步:

從n個數中選取編號最大的數,然后在剩下的n-1個數中選取m-1個數。直到從n-(m-1)中選取一個數為止 從n個數中選取次小的數,重復1的操作

代碼如下:

/** ?* 遞歸法解決組合問題 ?*/ ?void combine(int *arr, int n, int m, int *tmp, const int m) ?{ ? int i, j; ? ?for (i = n; i >= m; i --) { ? ?tmp[m] = i; ? ?if (m == 0) { // 選出m個數 ? ? for (j = 0; j < m; j ++) { ? ? ?printf("%d ", arr[tmp[j]]); ? ? } ? ? printf("n"); ? ?} else { ? ? combine(arr, i - 1, m - 1, tmp, m); ? ?} ? } ?}

dfs

其實考慮到用dfs,這道題目就簡單很多,dfs的回溯條件就是臨時數組的大小==k即可,同時附加一道leetcode上的題目,用dfs思路ac

題目

given two integers n and k, return all possible combinations of k numbers out of 1 ... n.

for example,

if n = 4 and k = 2, a solution is:

ac代碼

public class solution { ? public static arraylist

combine(int n, int k) { ? ?arraylist

rs = new arraylist

(); ? ?arraylistlist = new arraylist(); ? ? ? dfs(1, k, n, list, rs); ? ? ? return rs; ? } ? ? public static void dfs(int pos, int k, int n, arraylistlist, arraylist

rs) { ? ?if (() == k) { ? ? (new arraylist(list)); ? ?} ? ? ? for (int i = pos; i <= n; i ++) { ? ? (i); ? ? dfs(i + 1, k, n, list, rs); ? ? (() - 1); ? ?} ? } ?}

s("content_relate");

【關于字符串的組合算法問題的c語言實現攻略】相關文章:

1.

pid算法的c語言實現

2.

c語言中壓縮字符串的算法

3.

c語言中實現kmp算法實例

4.

c語言字符串快速壓縮算法代碼

5.

希爾排序算法的c語言實現示例

6.

關于c語言約瑟夫問題輸出序號算法

7.

c語言字符串操作函數和常用的實現

8.

c語言中返回字符串函數的實現方法

主站蜘蛛池模板: 高清视频编码器,4K音视频编解码器,直播编码器,流媒体服务器,深圳海威视讯技术有限公司 | 二氧化碳/活性炭投加系统,次氯酸钠发生器,紫外线消毒设备|广州新奥 | 合肥活动房_安徽活动板房_集成打包箱房厂家-安徽玉强钢结构集成房屋有限公司 | 座椅式升降机_无障碍升降平台_残疾人升降平台-南京明顺机械设备有限公司 | 吹田功率计-长创耐压测试仪-深圳市新朗普电子科技有限公司 | 橡胶粉碎机_橡胶磨粉机_轮胎粉碎机_轮胎磨粉机-河南鼎聚重工机械制造有限公司 | 绿萝净除甲醛|深圳除甲醛公司|测甲醛怎么收费|培训机构|电影院|办公室|车内|室内除甲醛案例|原理|方法|价格立马咨询 | 纸张环压仪-纸张平滑度仪-杭州纸邦自动化技术有限公司 | 数码听觉统合训练系统-儿童感觉-早期言语评估与训练系统-北京鑫泰盛世科技发展有限公司 | 【化妆品备案】进口化妆品备案流程-深圳美尚美化妆品有限公司 | 北京易通慧公司从事北京网站优化,北京网络推广、网站建设一站式服务商-北京网站优化公司 | 超声波成孔成槽质量检测仪-压浆机-桥梁预应力智能张拉设备-上海硕冠检测设备有限公司 | 道康宁消泡剂-瓦克-大川进口消泡剂供应商 | 消电检公司,消电检价格,北京消电检报告-北京设施检测公司-亿杰(北京)消防工程有限公司 | 申江储气罐厂家,储气罐批发价格,储气罐规格-上海申江压力容器有限公司(厂) | 喷漆房_废气处理设备-湖北天地鑫环保设备有限公司 | 手机存放柜,超市储物柜,电子储物柜,自动寄存柜,行李寄存柜,自动存包柜,条码存包柜-上海天琪实业有限公司 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 济南画室培训-美术高考培训-山东艺霖艺术培训画室 | 地图标注-手机导航电子地图如何标注-房地产商场地图标记【DiTuBiaoZhu.net】 | 气动|电动调节阀|球阀|蝶阀-自力式调节阀-上海渠工阀门管道工程有限公司 | X光检测仪_食品金属异物检测机_X射线检测设备_微现检测 | 广州展览制作|展台制作工厂|展览设计制作|展览展示制作|搭建制作公司 | 防水套管厂家-柔性防水套管-不锈钢|刚性防水套管-天翔管道 | 根系分析仪,大米外观品质检测仪,考种仪,藻类鉴定计数仪,叶面积仪,菌落计数仪,抑菌圈测量仪,抗生素效价测定仪,植物表型仪,冠层分析仪-杭州万深检测仪器网 | 德国GMN轴承,GMN角接触球轴承,GMN单向轴承,GMN油封,GMN非接触式密封 | 振动筛-交叉筛-螺旋筛-滚轴筛-正弦筛-方形摇摆筛「新乡振动筛厂家」 | 盐水蒸发器,水洗盐设备,冷凝结晶切片机,转鼓切片机,絮凝剂加药系统-无锡瑞司恩机械有限公司 | 无菌检查集菌仪,微生物限度仪器-苏州长留仪器百科 | 24位ADC|8位MCU-芯易德科技有限公司 | 济南办公室装修-厂房装修-商铺装修-工装公司-山东鲁工装饰设计 | nalgene洗瓶,nalgene量筒,nalgene窄口瓶,nalgene放水口大瓶,浙江省nalgene代理-杭州雷琪实验器材有限公司 | ge超声波测厚仪-电动涂膜机-电动划格仪-上海洪富 | 宝鸡市人民医院 | 双段式高压鼓风机-雕刻机用真空泵-绍兴天晨机械有限公司 | 低粘度纤维素|混凝土灌浆料|有机硅憎水粉|聚羧酸减水剂-南京斯泰宝 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 食品质构分析仪-氧化诱导分析仪-瞬态法导热系数仪|热冰百科 | 沈阳缠绕膜价格_沈阳拉伸膜厂家_沈阳缠绕膜厂家直销 | 精密机械零件加工_CNC加工_精密加工_数控车床加工_精密机械加工_机械零部件加工厂 | 浴室柜-浴室镜厂家-YINAISI · 意大利设计师品牌 | 咿耐斯 |-浙江台州市丰源卫浴有限公司 |