x 62. Unique Paths

Recursive

 const memo = {};
 
 const uniquePaths = function(m, n) {
     const key = m + ',' + n;
     if (key in memo) return memo[key];
     if (m === 1 || n === 1) return 1
     if (m === 0 || n === 0) return 0;
     
     memo[key] = uniquePaths(m-1, n) + uniquePaths(m, n-1);
     return memo[key];
};

2nd try

time: O(m x n)

space: O(m or n)


// this reduces time
// const memo = {};
const memo = {};
var uniquePaths = function (m, n) {

    if (memo['' + m + n] !== undefined) {
        return memo['' + m + n];
    }

    const arr = new Array(m).fill(1);
    for (let i = 1; i < n; i++) {
        for (let j = 1; j < m; j++) {
            arr[j] += arr[j - 1];
        }
    }

    memo['' + m + n] = arr[m - 1];
    return arr[m - 1];
};

1st try

time: O(m x n)

space: O(m x n)

/**
 * @param {number} m
 * @param {number} n
 * @return {number}
 */
var uniquePaths = function(m, n) {
    const matrix = new Array(m);

    matrix[0] = new Array(n).fill(1);
    for (let i = 1; i < m; i++) {
        matrix[i] = new Array(n);
        matrix[i][0] = 1;
    }

    for (let i = 1; i < m; i++) {
        for (let j = 1; j < n; j++) {
            matrix[i][j] = matrix[i - 1][j] + matrix[i][j - 1];
        }
    }

    return matrix[m - 1][n - 1];
};

Last updated