今天一个同学问我: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狂 阅读(2032) 评论(5) 编辑 收藏 所属分类: Java算法
....ju ran you zhe me sha d banfa 回复 更多评论
@alex 朋友,恕我才疏学浅,实在不明白您评论的意思!请您赐教。 回复 更多评论
他说:居然有这么傻的办法 回复 更多评论
我觉得这算法很牛呀,或许他知道更好的算法吧,不过看他这么不淡定,应该不咋地,呵呵 回复 更多评论
如果这个字符串中有字母重复,该怎么做呢? 回复 更多评论
Powered by: BlogJava Copyright © 我为J狂