Sambit Mishra Sambit Mishra - 1 month ago 5
Python Question

Return true if a binary number either contains all zero or all ones on a single flip.(Python)

I got a program where any binary number is considered and with 1 flip of either 0 or 1, if we get all 0s or all 1s, then it returns true else it will return false.

For e.g. 110 on 1 flip of element 0 returns 111 and it is printed as true.
111 is a binary number which on one flip, is printed as false.
Any possible solution of how to solve it?

Looking forward to the best possible solutions. Appreciate if the solution is written using Python.

This is what i had actually done.

def binary(num, length = 4):
return format(num, '#0{}b'.format(length + 2)).replace('0b', '')
n = binary(125)
if (n.count('0') == 1) or (n.count('1') == 1):
return true

Actually I had no idea of how to flip it.


So you need to determine whether binary representation of given number contains only one "one" or only one "zero"? There is bit trick to find numbers with single bit set:

if (x == 0) 
   return false
if (x & (x - 1) == 0
   return true

Explanation: if number looks like b00001000, then decrement gives b00000111 and binary AND leads to zero result

For checking single-zero numbers just invert them

if there is no ~ operator (binary NOT) in Python, you can invert all bits of number with

x_inversion = -(x+1)