TheAlgorithms-Ruby/maths/power_of_two.rb

115 lines
1.7 KiB
Ruby
Raw Normal View History

2021-03-20 00:26:51 +01:00
# Power of 2
2021-03-18 21:50:30 +01:00
#
# Given an integer n, return true if it is a power of two. Otherwise, return false.
#
# An integer n is a power of two, if there exists an integer x such that n == 2^x.
#
# Example 1:
# Input: n = 1
# Output: true
# Explanation: 2^0 = 1
#
# Example 2:
# Input: n = 16
# Output: true
# Explanation: 2^4 = 16
#
# Example 3:
# Input: n = 3
# Output: false
#
# Example 4:
# Input: n = 4
# Output: true
#
# Example 5:
# Input: n = 5
# Output: false
#
# Constraints: -231 <= n <= 231 - 1
# @param {Integer} n
# @return {Boolean}
#
2021-03-20 00:19:45 +01:00
2021-03-18 21:50:30 +01:00
# Approach 1: Recursion
#
2021-03-20 04:56:58 +01:00
# Time Complexity: O(logn)
2021-03-18 21:50:30 +01:00
#
def is_power_of_two(n)
if n == 1
2021-03-20 04:56:58 +01:00
true
2021-09-03 22:24:58 +02:00
elsif n.even?
2021-03-20 04:56:58 +01:00
is_power_of_two(n / 2)
2021-03-18 21:50:30 +01:00
else
2021-03-20 04:56:58 +01:00
false
2021-03-18 21:50:30 +01:00
end
end
n = 1
# Output: true
puts is_power_of_two(n)
n = 16
# Output: true
puts is_power_of_two(n)
n = 3
# Output: false
puts is_power_of_two(n)
n = 4
# Output: true
puts is_power_of_two(n)
n = 5
# Output: false
2021-03-20 00:19:45 +01:00
puts is_power_of_two(n)
#
# Approach 2: Without recursion
#
# Time Complexity: O(n)
#
def is_power_of_two(n)
2021-09-03 22:24:58 +02:00
n /= 2 while n.even? && n != 0
2021-03-20 00:19:45 +01:00
n == 1
end
n = 1
# Output: true
puts is_power_of_two(n)
n = 16
# Output: true
puts is_power_of_two(n)
n = 3
# Output: false
puts is_power_of_two(n)
n = 4
# Output: true
puts is_power_of_two(n)
n = 5
# Output: false
puts is_power_of_two(n)
2021-03-20 00:20:00 +01:00
#
# Approach 3: Using Math library
#
# Time Complexity: O(1)
#
def is_power_of_two(n)
result_exponent = Math.log(n) / Math.log(2)
result_exponent % 1 == 0
end
n = 1
# Output: true
puts is_power_of_two(n)
n = 16
# Output: true
puts is_power_of_two(n)
n = 3
# Output: false
puts is_power_of_two(n)
n = 4
# Output: true
puts is_power_of_two(n)
n = 5
# Output: false
2021-03-20 04:56:58 +01:00
puts is_power_of_two(n)