给定数组arr [] ,任务是对数组中的对进行计数,以使arr [i] / arr [j]为Pandigital分数。
A fraction N/D is called a Pandigital Fraction if the fraction contains all the digits from 0 to 9.
例子:
Input: arr = [ 12345, 67890, 123, 4567890 ]
Output: 3
Explanation:
The fractions are 12345/67890, 12345/4567890, and 123/4567890
Input: arr = [ 12345, 6789 ]
Output: 0
方法:这个想法是使用两个嵌套循环在数组的每个可能对上进行迭代,并为每个对将arr [i]和arr [j]连接为单个数字,并检查arr [i]和arr [j的连接]是以10为底的Pandigital编号,然后是递增计数。
下面是上述方法的实现:
Python3
# Python3 implementation of the
# above approach
import math
# Function to concatenate
# two numbers into one
def numConcat(num1, num2):
# Find number of digits in num2
digits = len(str(num2))
# Add zeroes to the end of num1
num1 = num1 * (10**digits)
# Add num2 to num1
num1 += num2
return num1
# Return true if n is pandigit
# else return false.
def checkPanDigital(n):
n = str(n)
b = 10
# Checking length is
# less than base
if (len(n) < b):
return 0;
hash = [0] * b;
# Traversing each digit
# of the number.
for i in range(len(n)):
# If digit is integer
if (n[i] >= '0' and \
n[i] <= '9'):
hash[ord(n[i]) - ord('0')] = 1;
# If digit is alphabet
elif (ord(n[i]) - ord('A') <= \
b - 11):
hash[ord(n[i]) - \
ord('A') + 10] = 1;
# Checking hash array, if any index is
# unmarked.
for i in range(b):
if (hash[i] == 0):
return 0;
return 1;
# Returns true if N is a
# Pandigital Fraction Number
def isPandigitalFraction(N, D):
join = numConcat(N, D)
return checkPanDigital(join)
# Returns number pandigital fractions
# in the array
def countPandigitalFraction(v, n) :
# iterate over all
# pair of strings
count = 0
for i in range(0, n) :
for j in range (i + 1,
n) :
if (isPandigitalFraction(v[i],
v[j])) :
count = count + 1
return count
# Driver Code
if __name__ == "__main__":
arr = [ 12345, 67890, 123, 4567890 ]
n = len(arr)
print(countPandigitalFraction(arr, n))
输出:
3
时间复杂度: O(N 2 )
参考: https://mathworld.wolfram.com/PandigitalFraction.html