算法程序題:
該公司筆試題就1個(gè),要求在10分鐘內(nèi)作完。
題目如下:用1、2、2、3、4、5這六個(gè)數(shù)字,用java寫(xiě)一個(gè)main函數(shù),打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"與"5"不能相連。 基本思路: 1 把問(wèn)題歸結(jié)為圖結(jié)構(gòu)的遍歷問(wèn)題。實(shí)際上6個(gè)數(shù)字就是六個(gè)結(jié)點(diǎn),把六個(gè)結(jié)點(diǎn)連接成無(wú)向連通圖,對(duì)于每一個(gè)結(jié)點(diǎn)求這個(gè)圖形的遍歷路徑,所有結(jié)點(diǎn)的遍歷路徑就是最后對(duì)這6個(gè)數(shù)字的排列組合結(jié)果集。 2 顯然這個(gè)結(jié)果集還未達(dá)到題目的要求。從以下幾個(gè)方面考慮: 1. 3,5不能相連:實(shí)際要求這個(gè)連通圖的結(jié)點(diǎn)3,5之間不能連通, 可在構(gòu)造圖結(jié)構(gòu)時(shí)就滿足改條件,然后再遍歷圖。 2. 不能有重復(fù): 考慮到有兩個(gè)2,明顯會(huì)存在重復(fù)結(jié)果,可以把結(jié)果集放在TreeSet中過(guò)濾重復(fù)結(jié)果。//TreeSet用于過(guò)濾一個(gè)集合中相同的東西還真是個(gè)挺不錯(cuò)的方法 3. 4不能在第三位: 仍舊在結(jié)果集中去除滿足此條件的結(jié)果。
采用二維數(shù)組定義圖結(jié)構(gòu),最后的代碼是:
posted on 2008-03-01 10:42 魯勝迪 閱讀(298) 評(píng)論(0) 編輯 收藏
Powered by: BlogJava Copyright © 魯勝迪