检查,如果阵列元素的两个功率(Check if array elements are power o

2019-10-22 16:54发布

我有一个编码的挑战:检查是否给定的正阵列的数字的力量2 ,如果是返回1 ,否则0 。 前

  • 输入: A=[2,3,4]
  • 输出: A=[1,0,1]

  • 输入: A =[1048,2048,1048576]

  • 输出: A=[1,1,1]

我想出了这个功能。

def  checkPw (arr)
  arr.map{|a| a != 0 && (a%2==0)?1 :0 }
end

此功能通过提供的测试,但我不知道这是否是干净的方式来做到这一点。 我想知道是否有更明确的方法来检查数组元素的力量。

Answer 1:

有检查的一招,如果一个正整数是,如果按位和比较2的幂xx - 1为零。 所以,你可以做一个数组下a检查每一个元素是2的幂:

a.all?{|x| x & (x - 1) == 0}

例子:

[2048, 2048, 1048576].all?{|x| x & (x - 1) == 0}
=> true

[1048, 2048, 1048576].all?{|x| x & (x - 1) == 0}
=> false

如果你想为每个元素的检查:

a.map{|x| x & (x - 1) == 0 ? 1 : 0}


Answer 2:

其他方式:

def po2?(arr)
  arr.map { |n| (n.to_s(2) =~ /^10*$/) ? 1 : 0 }
end

po2? [1,2,4,7,1024,1025]
  #=> [1,1,1,0,1,0]

例如,

n = 1024
s = n.to_s(2)
  #=> "10000000000"
s =~ /^10*$/)
 #=> true

n = 1025
s = n.to_s(2)
  #=> "10000000001"
s =~ /^10*$/)
 #=> false


Answer 3:

你可以使用一些技巧来确定解决方案,但也有一个Ruby方法专门找到电源的-2特定号码是什么。 您可以检查此方法的输出是一个整数与否,即:

array.map { |number| (Math.log2(number) % 1) == 0 ? 1 : 0 }


文章来源: Check if array elements are power of two
标签: ruby arrays