Calculate the sum with minimum usage of numbers

Here’s a hint:

23 : 11 + 11+ 1 ( 3 magic numbers)

120: 110+ 10 (2 magic numbers)

The highest digit in the target number is the answer, since you need exactly k magic numbers (all having 1 in the relevant position) in order for the sum to contain the digit k.

So the algorithm would start by splitting the target sum into digits. For example, if the input is 3052, you should create the following array:

int[] digits = {3,0,5,2};

While you split the target sum into digits, you can also find the largest digit.

int max = 5;

Now we know we need 5 magic numbers, and all that remains is actually finding them. You can do so by iterating over the array of the digits max times.

In each iteration you create a single magic number whose 1 digits correspond with positive values of the array. You also decrement those values.

1st iteration:

3,0,5,2 ->  create magic number 1011 & decrement the array values to 2,0,4,1

2nd iteration:

2,0,4,1 ->  create magic number 1011 & decrement the array values to 1,0,3,0

3rd iteration:

1,0,3,0 ->  create magic number 1010 & decrement the array values to 0,0,2,0

4th iteration:

0,0,2,0 ->  create magic number   10 & decrement the array values to 0,0,1,0

5th iteration:

0,0,1,0 ->  create magic number   10 & decrement the array values to 0,0,0,0

We are done, the magic numbers are 1011 + 1011 + 1010 + 10 + 10 = 3052.

Leave a Comment