语料库-提供经典范文,文案句子,常用文书,您的写作得力助手

字符串組合函數模板

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

字符串組合函數模板

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

字符串組合函數篇一

題目:輸入一個字符串,輸出該字符串中字符的所有組合。舉個例子,如果輸入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語言中返回字符串函數的實現方法

主站蜘蛛池模板: 众品地板网-地板品牌招商_地板装修设计_地板门户的首选网络媒体。 | 活性氧化铝球|氧化铝干燥剂|分子筛干燥剂|氢氧化铝粉-淄博同心材料有限公司 | 消泡剂_水处理消泡剂_切削液消泡剂_涂料消泡剂_有机硅消泡剂_广州中万新材料生产厂家 | 垃圾压缩设备_垃圾处理设备_智能移动式垃圾压缩设备--山东明莱环保设备有限公司 | 继电器模组-IO端子台-plc连接线-省配线模组厂家-世麦德 | 超声骨密度仪-动脉硬化检测仪器-人体成分分析仪厂家/品牌/价格_南京科力悦 | 防水套管_柔性防水套管_刚性防水套管-巩义市润达管道设备制造有限公司 | 七维官网-水性工业漆_轨道交通涂料_钢结构漆 | 集装箱展厅-住人集装箱住宿|建筑|房屋|集装箱售楼处-山东锐嘉科技工程有限公司 | 山东商品混凝土搅拌楼-环保型搅拌站-拌合站-分体仓-搅拌机厂家-天宇 | 国际线缆连接网 - 连接器_线缆线束加工行业门户网站 | 广州二手电缆线回收,旧电缆回收,广州铜线回收-广东益福电缆线回收公司 | 成都竞价托管_抖音代运营_网站建设_成都SEM外包-成都智网创联网络科技有限公司 | 仓储笼_金属箱租赁_循环包装_铁网箱_蝴蝶笼租赁_酷龙仓储笼租赁 测试治具|过炉治具|过锡炉治具|工装夹具|测试夹具|允睿自动化设备 | 咖啡加盟,咖啡店加盟连锁品牌-卡小逗| 锥形螺带干燥机(新型耙式干燥机)百科-常州丰能干燥工程 | 绿萝净除甲醛|深圳除甲醛公司|测甲醛怎么收费|培训机构|电影院|办公室|车内|室内除甲醛案例|原理|方法|价格立马咨询 | 机房监控|动环监控|动力环境监控系统方案产品定制厂家 - 迈世OMARA | 两头忙,井下装载机,伸缩臂装载机,30装载机/铲车,50装载机/铲车厂家_价格-莱州巨浪机械有限公司 | 阜阳在线-阜阳综合门户 | 合肥礼品公司-合肥礼品定制-商务礼品定制公司-安徽柏榽商贸有限公司 | 北京普辉律师事务所官网_北京律师24小时免费咨询|法律咨询 | FFU_空气初效|中效|高效过滤器_空调过滤网-广州梓净净化设备有限公司 | 大型低温冷却液循环泵-低温水槽冷阱「厂家品牌」京华仪器_京华仪器 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 高铝矾土熟料_细粉_骨料_消失模_铸造用铝矾土_铝酸钙粉—嵩峰厂家 | 专业生物有机肥造粒机,粉状有机肥生产线,槽式翻堆机厂家-郑州华之强重工科技有限公司 | 远程会诊系统-手术示教系统【林之硕】医院远程医疗平台 | 【北京写字楼出租_写字楼租赁_办公室出租网/出售】-远行地产官网 | 写方案网_方案策划方案模板下载| 干式磁选机_湿式磁选机_粉体除铁器-潍坊国铭矿山设备有限公司 | 信阳网站建设专家-信阳时代网联-【信阳网站建设百度推广优质服务提供商】信阳网站建设|信阳网络公司|信阳网络营销推广 | 脱硝喷枪-氨水喷枪-尿素喷枪-河北思凯淋环保科技有限公司 | 游泳池设备安装工程_恒温泳池设备_儿童游泳池设备厂家_游泳池水处理设备-东莞市君达泳池设备有限公司 | BESWICK球阀,BESWICK接头,BURKERT膜片阀,美国SEL继电器-东莞市广联自动化科技有限公司 | 电子书导航网_电子书之家_电子书大全_最新电子书分享发布平台 | 船用泵,船用离心泵,船用喷射泵,泰州隆华船舶设备有限公司 | 废气处理设备-工业除尘器-RTO-RCO-蓄热式焚烧炉厂家-江苏天达环保设备有限公司 | 实体店商新零售|微赢|波后|波后合作|微赢集团 | 旋转/数显粘度计-运动粘度测定仪-上海平轩科学仪器 | 光栅尺厂家_数显表维修-苏州泽升精密机械|