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

字符串組合函數(shù)模板

網(wǎng)絡(luò)整理 分享 時(shí)間: 收藏本文

字符串組合函數(shù)模板

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

字符串組合函數(shù)篇一

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

上面我們?cè)敿?xì)討論了如何用遞歸的思路求字符串的排列。同樣,本題也可以用遞歸的思路來(lái)求字符串的組合。

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

#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個(gè)組合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個(gè)字符的組合,2個(gè)字符的字符……一直到n個(gè)字符的組合,因此在函數(shù)void combination(char* string),我們需要一個(gè)for循環(huán)。另外,我們用一個(gè)vector來(lái)存放選擇放進(jìn)組合里的`字符。

用位運(yùn)算來(lái)實(shí)現(xiàn)求組合

#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的二進(jìn)制中哪些位為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個(gè)元素,1個(gè)元素,一直到n個(gè)元素,介紹二進(jìn)制做法。以字符串“abc”為例:

000 <---> null

001 <---> c

010 <---> b

011 <---> bc

100 <---> a

101 <---> ac

110 <---> ab

111 <---> abc

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

/** ?* write a method that returns all subsets of a set ?*/ ? #include#include#include/** ?* 通過(guò)0到2^-1來(lái)標(biāo)識(shí)子集 ?* ?* 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個(gè)數(shù)

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

遞歸

遞歸思路如下,從n個(gè)數(shù)中取出m個(gè)數(shù),可以分解為以下兩步:

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

代碼如下:

/** ?* 遞歸法解決組合問(wèn)題 ?*/ ?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個(gè)數(shù) ? ? for (j = 0; j < m; j ++) { ? ? ?printf("%d ", arr[tmp[j]]); ? ? } ? ? printf("n"); ? ?} else { ? ? combine(arr, i - 1, m - 1, tmp, m); ? ?} ? } ?}

dfs

其實(shí)考慮到用dfs,這道題目就簡(jiǎn)單很多,dfs的回溯條件就是臨時(shí)數(shù)組的大小==k即可,同時(shí)附加一道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");

【關(guān)于字符串的組合算法問(wèn)題的c語(yǔ)言實(shí)現(xiàn)攻略】相關(guān)文章:

1.

pid算法的c語(yǔ)言實(shí)現(xiàn)

2.

c語(yǔ)言中壓縮字符串的算法

3.

c語(yǔ)言中實(shí)現(xiàn)kmp算法實(shí)例

4.

c語(yǔ)言字符串快速壓縮算法代碼

5.

希爾排序算法的c語(yǔ)言實(shí)現(xiàn)示例

6.

關(guān)于c語(yǔ)言約瑟夫問(wèn)題輸出序號(hào)算法

7.

c語(yǔ)言字符串操作函數(shù)和常用的實(shí)現(xiàn)

8.

c語(yǔ)言中返回字符串函數(shù)的實(shí)現(xiàn)方法

信息流廣告 競(jìng)價(jià)托管 招生通 周易 易經(jīng) 代理招生 二手車 網(wǎng)絡(luò)推廣 自學(xué)教程 招生代理 旅游攻略 非物質(zhì)文化遺產(chǎn) 河北信息網(wǎng) 石家莊人才網(wǎng) 買車咨詢 河北人才網(wǎng) 精雕圖 戲曲下載 河北生活網(wǎng) 好書推薦 工作計(jì)劃 游戲攻略 心理測(cè)試 石家莊網(wǎng)絡(luò)推廣 石家莊招聘 石家莊網(wǎng)絡(luò)營(yíng)銷 培訓(xùn)網(wǎng) 好做題 游戲攻略 考研真題 代理招生 心理咨詢 游戲攻略 興趣愛(ài)好 網(wǎng)絡(luò)知識(shí) 品牌營(yíng)銷 商標(biāo)交易 游戲攻略 短視頻代運(yùn)營(yíng) 秦皇島人才網(wǎng) PS修圖 寶寶起名 零基礎(chǔ)學(xué)習(xí)電腦 電商設(shè)計(jì) 職業(yè)培訓(xùn) 免費(fèi)發(fā)布信息 服裝服飾 律師咨詢 搜救犬 Chat GPT中文版 語(yǔ)料庫(kù) 范文網(wǎng) 工作總結(jié) 二手車估價(jià) 情侶網(wǎng)名 愛(ài)采購(gòu)代運(yùn)營(yíng) 情感文案 古詩(shī)詞 邯鄲人才網(wǎng) 鐵皮房 衡水人才網(wǎng) 石家莊點(diǎn)痣 微信運(yùn)營(yíng) 養(yǎng)花 名酒回收 石家莊代理記賬 女士發(fā)型 搜搜作文 石家莊人才網(wǎng) 銅雕 關(guān)鍵詞優(yōu)化 圍棋 chatGPT 讀后感 玄機(jī)派 企業(yè)服務(wù) 法律咨詢 chatGPT國(guó)內(nèi)版 chatGPT官網(wǎng) 勵(lì)志名言 兒童文學(xué) 河北代理記賬公司 教育培訓(xùn) 游戲推薦 抖音代運(yùn)營(yíng) 朋友圈文案 男士發(fā)型 培訓(xùn)招生 文玩 大可如意 保定人才網(wǎng) 黃金回收 承德人才網(wǎng) 石家莊人才網(wǎng) 模型機(jī) 高度酒 沐盛有禮 公司注冊(cè) 造紙術(shù) 唐山人才網(wǎng) 沐盛傳媒
主站蜘蛛池模板: 亚洲第一影院 | 全部免费的毛片在线看美国 | 99视频在线精品免费观看18 | 91精品国产综合久久久久 | 九九毛片 | 欧美激情视频一级视频一级毛片 | 欧美高清视频在线 | 久久高清免费视频 | 成人国产精品一级毛片天堂 | 国产精品成久久久久三级 | 成人18网址在线观看 | 青木玲中文字幕一区二区 | 日本黄色官网 | 亚洲人成亚洲精品 | 美女视频免费看视频网站 | 无遮挡一级毛片私人影院 | 免费a级片网站 | 亚洲天堂毛片 | 女教师的一级毛片 | 免费色网址 | 免费国产黄网站在线观看视频 | 久久久久综合一本久道 | 国产手机免费视频 | 久久综合狠狠综合狠狠 | 成人在线a| 亚洲rct中文字幕在线 | 看国产一级毛片 | 欧美一级大黄特黄毛片视频 | 成人免费福利网站在线看 | 国产精品美女一级在线观看 | 九九热精| 在线播放成人高清免费视频 | 成人国产三级在线播放 | 成人免费手机在线看网站 | 久久久久久久国产高清 | 亚洲日本视频在线 | 视频二区 中文字幕 欧美 | 亚洲国产三级在线观看 | 免费人成在观看 | 521a久久九九久久精品 | 美女脱了内裤张开腿让男人桶网站 |