Kth symbol in grammar
class Solution {
//Row  Value   numberOfElementsInRow
//1    // 0                    1
//2    // 01                   2
//3    // 0110                 4
//4    // 01101001             8
    
//f(x,k) = f(x - 1, k/2) == 1 ? '10' : '01' = val;
//f(x,k) = k%2 != 0 ? val[0] : val[1];
    
    
    int[] possibility1;
    int[] possibility2;
        
    Solution() {
         possibility1 = new int[2];
        Arrays.setAll(possibility1, p -> p == 0 ? 1 : 0);
         possibility2 = new int[2];
        Arrays.setAll(possibility2, p -> p == 0 ? 0 : 1);
    }
    
    public int kthGrammar(int n, int k) {
        if(n == 1 || k == 1) {
            return 0;
        }
        int val = kthGrammar(n - 1, (k+1)/2);
       
       
        int[] possibility;
        if(val == 1) {
            possibility = possibility1;
        } else {
            possibility = possibility2;
        }
        return (k + 1) % 2 == 0 ? possibility[0] : possibility[1];
    }
}

Time complexity: O(n) since to calculate any val at n. I need to iterate 1... n-1 recursively.
space complexity: O(n) Needed for stack since I am doing some computation after recursive call.

Comments (0)