程式設計師面試題精選100題 字串的組合 演算法

2021-06-21 10:53:34 字數 900 閱讀 7124

題目:輸入乙個字串,輸出該字串中字元的所有組合。舉個例子,如果輸入

abc,它的組合有a、

b、c、

ab、ac、

bc、abc。

分析:在本系列部落格的第

28題《

字串的排列

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

假設我們想在長度為

n的字串中求

m個字元的組合。我們先從頭掃瞄字串的第乙個字元。針對第乙個字元,我們有兩種選擇:一是把這個字元放到組合中去,接下來我們需要在剩下的

n-1個字元中選取

m-1個字元;而是不把這個字元放到組合中去,接下來我們需要在剩下的

n-1個字元中選擇

mvoid

combination(char* string)

} void

combination(char* string, int number, vector& result)

if(*string == '\0')

return;

result.push_back(*string);

combination(string + 1, number - 1, result);

result.pop_back();

combination(string + 1, number, result); }

由於組合可以是

1個字元的組合,

2個字元的字元……一直到

n個字元的組合,因此在函式

void combination(char* string)

,我們需要乙個

for迴圈。另外,我們乙個

vector

來存放選擇放進組合裡的字元。

程式設計師面試題精選100題 字串的排列 演算法

題目 輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串 abc,則輸出由字元a b c所能排列出來的所有字串 abc acb bac bca cab和 cba。分析 這是一道很好的考查對遞迴理解的程式設計題,因此在過去一年中頻繁出現在各大公司的面試 筆試題中。我們以三個字元abc為例來分析一...

程式設計師面試題精選100題

今天開始各種刷面試題,沉下心來集中時間,全身心投入 題目 輸入一棵二元查詢樹,將該二元查詢樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只調整指標的指向。比如將二元查詢樹 10 6 14 4 8 12 16 轉換成雙向鍊錶 4 6 8 10 12 14 16。相關概念 二元查詢樹 它首先要是...

程式設計師面試題精選

問題描述 輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則輸出由字元a b c所能排列出來的所有字串abc acb bac bca cab和cba。問題分析 這是一道很好的考查對遞迴理解的程式設計題。寫遞迴程式關鍵有兩點,處理好進入與返回的關係,進入時改變了什麼,返回時應當恢復。字...