Pandigital number in a given base
Given an integer n and its base b. The task is to check if given number is Pandigital Number in the given base or not. A Pandigital number is an integer that has each digit of its base at least once.
It may be assumed that base is smaller than or equal to 36. In base 36, digits are [0, 1, …9. A, B, …Z]
Examples :
Input : n = “9651723480”, b = 10
Output : Yes
Given number n has all digits from 0 to 9
Input : n = “23456789ABCDEFGHIJKLMNOPQRSTUVWXYZ”,
b = 36
Output : No
Given number n doesn’t have all digits in base 36. For example 1 is missing.
Make a boolean hash array of size equal to base of the number and initialize it with false. Now, iterate each digit of the number mark its corresponding index value as true in the hash array. In the end, check whether all the value in hash array are marked or not, if marked print “Yes” i.e Pandigital number else print “No”.
Below is the implementation of this approach:
C++
#include <bits/stdc++.h>
using namespace std;
bool checkPandigital( int b, char n[])
{
if ( strlen (n) < b)
return false ;
bool hash[b];
memset (hash, false , sizeof (hash));
for ( int i = 0; i < strlen (n); i++) {
if (n[i] >= '0' && n[i] <= '9' )
hash[n[i] - '0' ] = true ;
else if (n[i] - 'A' <= b - 11)
hash[n[i] - 'A' + 10] = true ;
}
for ( int i = 0; i < b; i++)
if (hash[i] == false )
return false ;
return true ;
}
int main()
{
int b = 13;
char n[] = "1298450376ABC" ;
(checkPandigital(b, n)) ? (cout << "Yes" << endl)
: (cout << "No" << endl);
return 0;
}
|
Java
import java.util.*;
class GFG {
static boolean checkPandigital( int b, String n)
{
if (n.length() < b)
return false ;
boolean hash[] = new boolean [b];
Arrays.fill(hash, false );
for ( int i = 0 ; i < n.length(); i++) {
if (n.charAt(i) >= '0' && n.charAt(i) <= '9' )
hash[n.charAt(i) - '0' ] = true ;
else if (n.charAt(i) - 'A' <= b - 11 )
hash[n.charAt(i) - 'A' + 10 ] = true ;
}
for ( int i = 0 ; i < b; i++)
if (hash[i] == false )
return false ;
return true ;
}
public static void main(String[] args)
{
int b = 13 ;
String n = "1298450376ABC" ;
if (checkPandigital(b, n))
System.out.println( "Yes" );
else
System.out.println( "No" );
}
}
|
Python3
def checkPandigital(b, n):
if ( len (n) < b):
return 0
hash = [ 0 ] * b
for i in range ( len (n)):
if (n[i] > = '0' and n[i] < = '9' ):
hash [ ord (n[i]) - ord ( '0' )] = 1
else if ( ord (n[i]) - ord ( 'A' ) < = b - 11 ):
hash [ ord (n[i]) - ord ( 'A' ) + 10 ] = 1
for i in range (b):
if ( hash [i] = = 0 ):
return 0
return 1
b = 13
n = "1298450376ABC"
if (checkPandigital(b, n)):
print ( "Yes" )
else :
print ( "No" )
|
C#
using System;
class GFG {
static bool checkPandigital( int b, string n)
{
if (n.Length < b)
return false ;
bool [] hash = new bool [b];
for ( int i = 0; i < b; i++)
hash[i] = false ;
for ( int i = 0; i < n.Length; i++) {
if (n[i] >= '0' && n[i] <= '9' )
hash[n[i] - '0' ] = true ;
else if (n[i] - 'A' <= b - 11)
hash[n[i] - 'A' + 10] = true ;
}
for ( int i = 0; i < b; i++)
if (hash[i] == false )
return false ;
return true ;
}
public static void Main()
{
int b = 13;
String n = "1298450376ABC" ;
if (checkPandigital(b, n))
Console.Write( "Yes" );
else
Console.Write( "No" );
}
}
|
Javascript
<script>
function checkPandigital(b, n)
{
if (n.length < b)
return 0;
let hash = [];
for (let i = 0; i< b; i++)
hash[i] = 0;
for (let i = 0; i < n.length; i++)
{
if (n[i] >= '0' && n[i] <= '9' )
hash[n[i] - '0' ] = 1;
else if (n.charCodeAt(i) - 'A' .charCodeAt(0) <= b - 11)
hash[n.charCodeAt(i) - 'A' .charCodeAt(0) + 10] = 1;
}
for (let i = 0; i < b; i++)
if (hash[i] == 0)
return 0;
return 1;
}
let b = 13;
let n = "1298450376ABC" ;
if (checkPandigital(b, n))
document.write( "Yes" );
else
document.write( "No" );
</script>
|
PHP
<?php
function checkPandigital( $b , $n )
{
if ( strlen ( $n ) < $b )
return 0;
$hash = array ();
for ( $i = 0; $i < $b ; $i ++)
$hash [ $i ] = 0;
for ( $i = 0; $i < strlen ( $n ); $i ++)
{
if ( $n [ $i ] >= '0' && $n [ $i ] <= '9' )
$hash [ $n [ $i ] - '0' ] = 1;
else if (ord( $n [ $i ]) - ord( 'A' ) <= $b - 11)
$hash [ord( $n [ $i ]) - ord( 'A' ) + 10] = 1;
}
for ( $i = 0; $i < $b ; $i ++)
if ( $hash [ $i ] == 0)
return 0;
return 1;
}
$b = 13;
$n = "1298450376ABC" ;
if (checkPandigital( $b , $n ))
echo "Yes" ;
else
echo "No" ;
?>
|
Time Complexity: O(b + strlen(n))
Auxiliary Space: O(b)
Reference:
https://en.wikipedia.org/wiki/Pandigital_number
This article is contributed by Anuj Chauhan.
Using set :
Approach:
We can use set to check if a given number in a given base is pandigital or not. We create a set of all possible digits in the given base and check if the set of digits in the given number is equal to the set of all possible digits.
Create a set containing all the digits in the base.
Convert the given number to a string.
Convert the string to a set of characters.
Check if the two sets are equal.
C++
#include <iostream>
#include <string>
#include <set>
using namespace std;
bool isPandigitalSet( const string& n, int b) {
set< char > digits;
for ( char i = '0' ; i < '0' + b; i++) {
digits.insert(i);
}
set< char > numDigits(n.begin(), n.end());
return digits == numDigits;
}
int main() {
string n1 = "9651723480" ;
int b1 = 10;
cout << "Input: n = " << n1 << ", b = " << b1 << endl;
if (isPandigitalSet(n1, b1)) {
cout << "Output: Yes\nGiven number n has all digits from 0 to 9" << endl;
} else {
cout << "Output: No" << endl;
}
string n2 = "23456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
int b2 = 36;
cout << "\nInput: n = " << n2 << ", b = " << b2 << endl;
if (isPandigitalSet(n2, b2)) {
cout << "Output: Yes\nGiven number n has all digits from 0 to 9" << endl;
} else {
cout << "Output: No" << endl;
}
return 0;
}
|
Java
import java.util.HashSet;
import java.util.Set;
public class Main {
static boolean isPandigitalSet(String n, int b) {
Set<Character> digits = new HashSet<>();
for ( char i = '0' ; i < ( char )( '0' + b); i++) {
digits.add(i);
}
Set<Character> numDigits = new HashSet<>();
for ( char c : n.toCharArray()) {
numDigits.add(c);
}
return digits.equals(numDigits);
}
public static void main(String[] args) {
String n1 = "9651723480" ;
int b1 = 10 ;
System.out.println( "Input: n = " + n1 + ", b = " + b1);
if (isPandigitalSet(n1, b1)) {
System.out.println( "Output: Yes\nGiven number n has all digits from 0 to 9" );
} else {
System.out.println( "Output: No" );
}
String n2 = "23456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
int b2 = 36 ;
System.out.println( "\nInput: n = " + n2 + ", b = " + b2);
if (isPandigitalSet(n2, b2)) {
System.out.println( "Output: Yes\nGiven number n has all digits from 0 to 9" );
} else {
System.out.println( "Output: No" );
}
}
}
|
Python3
def is_pandigital_set(n, b):
digits = set ( str (i) for i in range (b))
num_digits = set ( str (n))
return digits = = num_digits
n1 = "9651723480"
b1 = 10
print ( "Input:" , "n =" , n1, ", b =" , b1)
if is_pandigital_set(n1, b1):
print ( "Output: Yes\nGiven number n has all digits from 0 to 9" )
else :
print ( "Output: No" )
n2 = "23456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
b2 = 36
print ( "\nInput:" , "n =" , n2, ", b =" , b2)
if is_pandigital_set(n2, b2):
print ( "Output: Yes\nGiven number n has all digits from 0 to 9" )
else :
print ( "Output: No" )
|
C#
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static bool IsPandigitalSet( string n, int b)
{
HashSet< char > digits = new HashSet< char >();
for ( char i = '0' ; i < '0' + b; i++)
{
digits.Add(i);
}
HashSet< char > numDigits = new HashSet< char >(n);
return digits.SetEquals(numDigits);
}
static void Main( string [] args)
{
string n1 = "9651723480" ;
int b1 = 10;
Console.WriteLine($ "Input: n = {n1}, b = {b1}" );
if (IsPandigitalSet(n1, b1))
{
Console.WriteLine( "Output: Yes\nGiven number n has all digits from 0 to 9" );
}
else
{
Console.WriteLine( "Output: No" );
}
string n2 = "23456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
int b2 = 36;
Console.WriteLine($ "\nInput: n = {n2}, b = {b2}" );
if (IsPandigitalSet(n2, b2))
{
Console.WriteLine( "Output: Yes\nGiven number n has all digits from 0 to 9" );
}
else
{
Console.WriteLine( "Output: No" );
}
}
}
|
Javascript
function isPandigitalSet(n, b) {
const digits = new Set();
for (let i = '0' ; i < String.fromCharCode( '0' .charCodeAt(0) + b); i++) {
digits.add(i);
}
const numDigits = new Set(n);
return [...digits].every(digit => numDigits.has(digit));
}
const n1 = "9651723480" ;
const b1 = 10;
console.log(`Input: n = ${n1}, b = ${b1}`);
if (isPandigitalSet(n1, b1)) {
console.log( "Output: Yes\nGiven number n has all digits from 0 to 9" );
} else {
console.log( "Output: No" );
}
const n2 = "23456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
const b2 = 36;
console.log(`\nInput: n = ${n2}, b = ${b2}`);
if (isPandigitalSet(n2, b2)) {
console.log( "Output: Yes\nGiven number n has all digits from 0 to 9" );
} else {
console.log( "Output: No" );
}
|
Output
Input: n = 9651723480 , b = 10
Output: Yes
Given number n has all digits from 0 to 9
Input: n = 23456789ABCDEFGHIJKLMNOPQRSTUVWXYZ , b = 36
Output: No
Time complexity: O(n)
Space complexity: O(b)
Last Updated :
06 Dec, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...