可以用贪心法求解。首先设要求解的数为N
在集合中,找到小于N的最大的数M ,将N分解为M 与N-M两部分。
再在集合中,找到小于N-M的最大的数。
重复以上过程直到找到最终解例如,现有一个数字11
找到集合中小于11的最大的数(该数一定是2的N次方),得到8,剩余数字为3
再找到小于3的最大的数,得到2,剩余数字为1.
1本身也是2的N次方中的一个数,所以查找结束。
最后结果为 11 = 1 | 2 | 8
在集合中,找到小于N的最大的数M ,将N分解为M 与N-M两部分。
再在集合中,找到小于N-M的最大的数。
重复以上过程直到找到最终解例如,现有一个数字11
找到集合中小于11的最大的数(该数一定是2的N次方),得到8,剩余数字为3
再找到小于3的最大的数,得到2,剩余数字为1.
1本身也是2的N次方中的一个数,所以查找结束。
最后结果为 11 = 1 | 2 | 8
StringBuilder binary = new StringBuilder(Integer.toBinaryString(num));
binary = binary.reverse();
int value = 1;
for (int i = 0; i < binary.length(); i++) {
char c = binary.charAt(i);
if (c == '1') {
System.out.print(value + " ");
}
value <<= 1;
}
}