面试问题:查找包含k 1的所有数字

时间:2013-04-26 00:28:10

标签: binary combinations

我被要求实施以下功能:

void printNumber(int N, int K);

它打印所有长度为N的二进制数,其中包含K个。

e.g。

input: printNumber(3,2) 
output: 
011
101
110

我试图通过将二进制文件作为字符串来操作并使用递归来解决这个问题,但我想有一些位操作技巧可以更好地解决这个问题。

我可以在这里申请任何魔术吗?

2 个答案:

答案 0 :(得分:0)

最好的方法是生成它们

   def go(n,k):
       if n == 0:
           if k > 0:
               return []
           if k == 0:
               return ['']

       return ['0'+x for x in go(n-1,k)] + ['1'+x for x in go(n-1,k-1)];

答案 1 :(得分:0)

首先使用Integer.toBinaryString(i)找到二进制值,然后取出该值的排列