"""
A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below).

The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner
 of the grid (marked 'Finish' in the diagram below).

How many possible unique paths are there?

Above is a 3 x 7 grid. How many possible unique paths are there?

Note: m and n will be at most 100.

ANSWER:
dp. We even don't need a 2D table, just one array is enough
"""
class Solution:
    # @param {integer} m
    # @param {integer} n
    # @return {integer}
    def uniquePaths(self, m, n):
        re = [[1 for j in range(n) ] for i in range(m)]
        for i in range(1,m):
            for j in range(1,n):
                re[i][j] = re[i-1][j] + re[i][j-1]
        return re[-1][-1]

class Solution2:
    # @param {integer} m
    # @param {integer} n
    # @return {integer}
    def uniquePaths(self, m, n):
        re = [1 for j in range(n) ]
        for i in range(1,m):
            for j in range(1,n):
                re[j] += re[j-1]
        return re[-1]

if __name__ == '__main__':
    print

