📌  相关文章
📜  Python字典 |检查两个数字的二进制表示是否是字谜

📅  最后修改于: 2022-05-13 01:55:15.725000             🧑  作者: Mango

Python字典 |检查两个数字的二进制表示是否是字谜


给定两个数字,您需要检查它们是否是二进制表示的彼此的字谜。

例子:

Input : a = 8, b = 4 
Output : Yes
Binary representations of both
numbers have same 0s and 1s.

Input : a = 4, b = 5
Output : No

我们有解决此问题的现有解决方案,请参阅检查两个数字的二进制表示是否是字谜链接。我们可以在Python中使用 Counter(iterable) 方法和Dictionary Comparison快速解决这个问题。做法很简单,

  1. 使用 bin()函数将这两个数字转换为二进制。
  2. 由于两个数字的二进制表示的长度可能不同,因此我们将在较短字符串的开头附加零以使两个字符串的长度相等。 IE。;附加零 = abs(len(bin1)-len(bin2))。
  3. 使用Counter()函数将包含由 bin函数返回的 0 和 1 的输出字符串转换为字典,具有 0 和 1 个键并将它们的计数作为值。比较两个字典,如果两个字典中 0 和 1 的值相等,则两个数字的二进制表示是字谜,否则不是。
# function to Check if binary representations
# of two numbers are anagram
from collections import Counter
  
def checkAnagram(num1,num2):
  
    # convert numbers into in binary
    # and remove first two characters of 
    # output string because bin function 
    # '0b' as prefix in output string
    bin1 = bin(num1)[2:]
    bin2 = bin(num2)[2:]
  
    # append zeros in shorter string
    zeros = abs(len(bin1)-len(bin2))
    if (len(bin1)>len(bin2)):
         bin2 = zeros * '0' + bin2
    else:
         bin1 = zeros * '0' + bin1
  
    # convert binary representations 
    # into dictionary
    dict1 = Counter(bin1)
    dict2 = Counter(bin2)
  
    # compare both dictionaries
    if dict1 == dict2:
         print('Yes')
    else:
         print('No')
  
# Driver program
if __name__ == "__main__":
    num1 = 8
    num2 = 4
    checkAnagram(num1,num2)
     

输出:

Yes