Project Euler #38: Pandigital multiples

Question
Take the number 192 and multiply it by each of 1, 2, and 3:
192 × 1 = 192
192 × 2 = 384
192 × 3 = 576
By concatenating each product we get the 1 to 9 pandigital, 192384576. We will call 192384576 the concatenated product of 192 and (1,2,3)
The same can be achieved by starting with 9 and multiplying by 1, 2, 3, 4, and 5, giving the pandigital, 918273645, which is the concatenated product of 9 and (1,2,3,4,5).
What is the largest 1 to 9 pandigital 9-digit number that can be formed as the concatenated product of an integer with (1,2, ... , n) where n > 1?

Answer : 932718654

Hacker Rank Problem

Solution
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import java.util.*;

public class Solution {

    public static void main(String[] args) {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int k = in.nextInt();

        for(int i=2;i<n;i++)
        {
            StringBuffer sb = new StringBuffer();
            for(int j=1;j<=k;j++)
            {
                long product = i*j;
                sb.append(product);
                if(sb.length() == k && isKPanDigital(sb, k))
                    System.out.println(i);
            }
        }
    }
    
    public static boolean isKPanDigital(StringBuffer sb, int k)
    {
        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
        String s = sb.toString();
        for(int i=0;i<s.length();i++)
        {
            if(!map.containsKey(Character.getNumericValue(s.charAt(i))))
                map.put(Character.getNumericValue(s.charAt(i)), 1);
            else return false;
        }
        for(int i=1;i<=k;i++)
        {
            if(!map.containsKey(i)) return false;
        }
        return true;
    }
}

Comments

Post a Comment

Popular Posts