挑战
给定一个正整数列表,请查找是否存在一个置换,其中每个整数占一个位,1
可以创建一个由所有s 组成的二进制数。
结果二进制数中的位数等于整数列表中的最高MSB。
输出量
您的代码必须输出或返回true / falsey值,以指示是否存在这种排列。
例子
真相:
使用list [4, 5, 2]
及其二进制表示形式[100, 101, 10]
,我们可以分别使用第三,第一和第二位来创建111
:
4 -> 100 -> 100 -> 1
5 -> 101 -> 101 -> 1
2 -> 010 -> 010 -> 1
Result 111
使用list [3, 3, 3]
,所有数字的第一位和第二位都设置为1
,因此我们可以选择一个数字作为备用:
3 -> 11 -> 11 -> 1
3 -> 11 -> 11 -> 1
3 -> 11 -> 11 ->
Result 11
虚假:
使用list时[4, 6, 2]
,没有数字的第一位设置为1
,因此无法创建二进制数:
4 -> 100
6 -> 110
2 -> 010
使用list时[1, 7, 1]
,只有一个数字的第二和第三位设置为1
,并且无法创建该数字:
1 -> 001
7 -> 111
1 -> 001
显然,如果设置的最大位数超过整数数,则永远无法创建结果数。
测试用例
真相:
[1]
[1, 2]
[3, 3]
[3, 3, 3]
[4, 5, 2]
[1, 1, 1, 1]
[15, 15, 15, 15]
[52, 114, 61, 19, 73, 54, 83, 29]
[231, 92, 39, 210, 187, 101, 78, 39]
虚假:
[2]
[2, 2]
[4, 6, 2]
[1, 7, 1]
[15, 15, 15]
[1, 15, 3, 1]
[13, 83, 86, 29, 8, 87, 26, 21]
[154, 19, 141, 28, 27, 6, 18, 137]