今天一個同學(xué)問我:Java中有沒有二進(jìn)制數(shù)據(jù)類型,我在Baidu上搜了一下,得到結(jié)論Java中的整型變量只有十進(jìn)制,八進(jìn)制,十六進(jìn)制的表示形式。我問這個同學(xué)為什么要問這個問題,他告訴我,他在編一個算法時用到二進(jìn)制轉(zhuǎn)換問題。他是在為一個字符集求子集。他的算法如下: 對于集合{A,B,C,D},它的非空子集個數(shù)為2×2×2×2-1,用二進(jìn)制表示就是1111,我們規(guī)定從左到右第1位對應(yīng)A,第2位對應(yīng)B,第3位對應(yīng)C,第4位對應(yīng)D。如果相應(yīng)位為1,則表示存在該字符,否則不存在該字符。如1101就表示{A,B,D} 。這樣,對于一個n個字符組成的集合,根據(jù)n可以算法它的非空子集個數(shù)為m(2的n次冪-1),將m轉(zhuǎn)換為二進(jìn)制數(shù),然后采用每次減1的方法,即可得到所有子集。 這個時候我才理解同學(xué)尋找二進(jìn)制數(shù)據(jù)類型的原因,其實我們完全可以在javaAPI中選擇一個能將整型變量轉(zhuǎn)換為二進(jìn)制字符串的方法,先將整型變量-1,再轉(zhuǎn)換為二進(jìn)制字符串,最后根據(jù)二進(jìn)制字符串就可以得到相應(yīng)集合的子集。 我在JDK幫助文檔中查到一個方法:Integer類中有一個static方法toBinaryString(int i),這個方法就是將整型i轉(zhuǎn)換為二進(jìn)制字符串,這下一切都解決了,代碼如下:
本算法的輸出是:111111101101110010111010100110000111011001010100001100100001
posted on 2007-04-15 12:28 我為J狂 閱讀(2040) 評論(5) 編輯 收藏 所屬分類: Java算法
....ju ran you zhe me sha d banfa 回復(fù) 更多評論
@alex 朋友,恕我才疏學(xué)淺,實在不明白您評論的意思!請您賜教。 回復(fù) 更多評論
他說:居然有這么傻的辦法 回復(fù) 更多評論
我覺得這算法很牛呀,或許他知道更好的算法吧,不過看他這么不淡定,應(yīng)該不咋地,呵呵 回復(fù) 更多評論
如果這個字符串中有字母重復(fù),該怎么做呢? 回復(fù) 更多評論
Powered by: BlogJava Copyright © 我為J狂