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