筆試演算法之路(C C ) 輸出左右「對稱」序列

2021-08-26 14:53:18 字數 1492 閱讀 4234

##1、題目描述

輸入區間 [1, 9] 上的乙個整數 n,輸出滿足條件的所有序列及其個數,條件如下:

(1)每個序列都有 2n 位,每位上可填數字 0 或 1;

(2)每個序列的前 n 位和後 n 位包含 1 或 0 的個數相同,即「對稱」,但並不要求位置一定對應。

###示例1:

輸入:1

輸出:00

11滿足條件的序列個數:2

###示例2:

輸入:2

輸出:0000

0101

0110

1001

1010

1111

滿足條件的序列個數:6

###示例3:

輸入:3

輸出:000000

001001

001010

001100

010001

010010

010100

011011

011101

011110

100001

100010

100100

101011

101101

101110

110011

110101

110110

111111

滿足條件的序列個數:20

##2、**實現

//如果用列舉法實現,那簡直是噩夢,而轉換成滿二叉樹的路徑問題,

//找出從根節點到葉節點的所有路徑,再從中選出符合條件的路徑列印出來,就很容易了。

#include #includeusing namespace std;

typedef int telemtype;

typedef struct binarytreenode binarytreenode, *binarytree;

long pathcount; //符合條件的路徑數

//先序建立滿二叉樹

void creatbitree(binarytree &root, int layer, int flag)

else }

//列印從根節點到葉節點的所有符合條件的路徑

void findallpath(binarytree proot, vector&path)

path.push_back(proot->m_nvalue);

if (proot->m_pleft == null && proot->m_pright == null) //達到葉節點

if (sumfrount == sumbehind) //符合條件的列印出來

}if (proot->m_pleft != null) //左子樹

if (proot->m_pright != null) //右子樹

path.pop_back();//在返回到父節點之前,在路徑上刪除當前節點

}int main()

return 0;

}

2014 華為筆試演算法彙總

1.通過鍵盤輸入一串小寫字母 a z 組成的字串。請編寫乙個字串過濾程式,若字串中出現多個相同的字元,將非首次出現的字元過濾掉。比如字串 abacacde 過濾結果為 abcde 要求實現函式 void stringfilter const char pinputstr,long linputlen...

面試筆試演算法目錄

尋找缺失的數字 二進位制中1的個數 位運算 檢測乙個數能否被3整除 位運算 判斷兩個數是否符號相反 位運算 數字轉字母的編碼方式的個數 dp 直方圖最大面積 dp 求最長上公升 下降子串行 o nlgn 尋找下乙個較大元素 利用棧 包含min函式的棧 利用棧 中綴表示式轉為字尾表示式 棧 tromi...

筆試演算法 最長子串

子字串的定義和子串行的定義類似,但要求是連續分布在其他字串中。比如輸入兩個字串bdcaba和abcbdab的最長公共字串有bd和ab,它們的長度都是2。最直接的解法自然是找出兩個字串的所有子字串進行比較看他們是否相同,然後取得相同最長的那個。對於乙個長度為n的字串,它有n n 1 2 個非空子串。所...