找到可以用1和0编写的数字的多个

给定数字n (2 <= n 10,3 – > 111,4 – > 100,7 – > 1001,11 – > 11,9 – > 111 111 111。

我的想法不是很好:{/ * n | 2和n | 5 +“000”(最大值为幻影(2,5)) – > n | 3 +“111”* /}

我认为,按照剩余的数字分组由数字n组成,格式为0/1。 谢谢你的帮助!

您可以使用广度优先搜索 。 从入队1开始,因为您的号码必须以1开头,然后每次从队列中提取数字x ,看它是否是n的倍数。 如果是,您有答案,如果没有在队列中插入x * 10x * 10 + 1 (按此顺序)。

请注意,您实际上不必在队列中存储1 s和0 s的整个字符串:它足以存储除以n的余数和一些可以重构实际字符串的辅助信息。 如果您需要更多详细信息,请写回。

非暴力方法将迭代一系列仅包含0和1的数字,然后确定该数字是否是所讨论数字的倍数。 这种方法比迭代n的倍数并确定它是否仅包含01要有效得多。

IVlad的建议是生成系列的更有效方法(仅包含01 )。 但是,如果您希望即时生成数字(没有队列的内存开销),您可以简单地遍历整数(或使用循环索引),并且对于每个值,将其二进制表示解释为十进制数。

 2 (Decimal) -> 10 (Binary) -> (interpret as decimal 10) 3 (Decimal) -> 11 (Binary) -> (interpret as decimal 11) 4 (Decimal) -> 100 (Binary) -> (interpret as decimal 100) 5 (Decimal) -> 101 (Binary) -> (interpret as decimal 101) ... and so on. 

对于转换,我怀疑它可以通过链接对Integer.toBinaryString()String.parseInt()调用来完成,但可能有更有效的方法来做到这一点。

这是一个在线演示,可以帮助您入门: http : //jsfiddle.net/6j5De/4/

 public static int result(int num) { int i =2; while(true) { int mult = Integer.parseInt(Integer.toString(i++,2)); if( mult % num == 0) //Check whether it is a multipler of given number or not ? { return mult; } } }