久久一区二区三区精品-久久一区二区明星换脸-久久一区二区精品-久久一区不卡中文字幕-91精品国产爱久久久久久-91精品国产福利尤物免费

字符串組合函數模板

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

字符串組合函數模板

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

字符串組合函數篇一

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

主站蜘蛛池模板: 国产美女又黄又爽又色视频免费 | 欧美亚洲国产激情一区二区 | 欧美日韩第二页 | 亚洲成人天堂 | 欧美啪啪一级毛片 | 国产成人无精品久久久久国语 | 亚洲国产欧美日韩第一香蕉 | 国产亚洲精品午夜高清影院 | 一级一片一a一片 | 99久久免费精品国产免费 | 欧洲国产伦久久久久久久 | 国产精品不卡在线 | 欧美一区二区三区视频在线 | 欧美成年视频 | 美国一级大黄香蕉片 | 午夜精品影院 | 国产精品一区二区四区 | 99久久国产综合精品1尤物 | 中国大陆一级毛片 | 亚洲综合久久久久久中文字幕 | 久久精品欧美日韩精品 | 综合图片亚洲网友自拍10p | 久久99精品久久久久久青青91 | 99久久精品国产一区二区三区 | 亚洲第一成年网站大全亚洲 | 欧美一区二区在线免费观看 | 国产成人精品免费 | 美女一级视频 | 国产乱淫视频 | yy毛片 | 精品国产精品 | 一级做a爱 | a级毛片免费全部播放 | 国产美女一区精品福利视频 | 久久视频在线观看免费 | 波多野结衣在线视频免费观看 | 美女视频黄免费 | 久久精品综合免费观看 | 欧美一级成人毛片视频 | 免费一级淫片aaa片毛片a级 | 色a在线|