Convert Integer to the Sum of Two No-Zero Integers

Easy
Watch on YouTube ↗

Solution

 /*------------------ Approach 1 (O(n)) ----------------------*/
class Solution {
    public int[] getNoZeroIntegers(int n) {
        
        for(int i=1; i<n; i++) {
            int a = i;
            int b = n-i;
            if(!String.valueOf(a).contains("0") && !String.valueOf(b).contains("0")) {
                return new int[]{a,b};
            }
        }

        return new int[0];

    }
}
 /*------------------ Approach 2 (logn) ----------------------*/


class Solution {
    public int[] getNoZeroIntegers(int n) {
        
        int a = 0, b = 0;

        int multiple = 1;
        // log10(n) = total number of digits
        // 10^4 -- 5 times -- O(1) 
        while(n>0) {
            int digit = n%10;
            n = n/10;

            if(digit==0) {
                n--;
                a += 1*multiple;
                b += 9*multiple;
            }
            else if(digit == 1 && n>0) {
                n--;
                a += 2*multiple;
                b += 9*multiple;
            }
            else {
                // default
                a += 1*multiple;
                b += (digit-1)*multiple;
            }

            multiple = multiple*10; // 1, 10, 100
        }

        return new int[]{a,b};
        

    }
}

/*

- Build two numbers digit by digit

- Split each digit to add up correctly

- Avoid zeros in either number

- Borrow for 0 or 1 → (1,9) or (2,9)

Example  n = 111

a + b = 111

n     Digit(d)   total          multiple     a   b
111    1          11[2,9]          1         2   9
10     0          10[1,9]          10        2 + (1)*10   9 + (10)*9  = 12,99
0     

n = 55
n     Digit(d)   n    multiple     a   b
55     5         5       1         1   4
5      5         0       10        11  44


*/