mirror of
https://github.com/TheAlgorithms/Ruby
synced 2024-12-30 22:24:11 +01:00
69 lines
1.2 KiB
Ruby
69 lines
1.2 KiB
Ruby
|
# Power of 2
|
||
|
#
|
||
|
# 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}
|
||
|
#
|
||
|
|
||
|
#
|
||
|
# Approach 1: Bitwise operators: Turn off the Rightmost 1-bit
|
||
|
#
|
||
|
|
||
|
# Note that there are two ways of solving this problem via bitwise operations:
|
||
|
# 1. How to get / isolate the rightmost 1-bit: x & (-x).
|
||
|
# 2. How to turn off (= set to 0) the rightmost 1-bit: x & (x - 1).
|
||
|
# In this approach, we're reproducing item 2.
|
||
|
|
||
|
# Complexity Analysis
|
||
|
#
|
||
|
# Time complexity: O(1).
|
||
|
# Space complexity: O(1).
|
||
|
|
||
|
def is_power_of_two(n)
|
||
|
return false if n < 1
|
||
|
|
||
|
n & (n - 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
|
||
|
puts is_power_of_two(n)
|