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快速解决这个问题。做法很简单,
- 使用 bin()函数将这两个数字转换为二进制。
- 由于两个数字的二进制表示的长度可能不同,因此我们将在较短字符串的开头附加零以使两个字符串的长度相等。 IE。;附加零 = abs(len(bin1)-len(bin2))。
- 使用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