62. Unique Paths
package LeetCode_62 /** * 62. Unique Paths * https://leetcode.com/problems/unique-paths/description/ * * 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? * */ class Solution { /* * solution:DP, Top-Down, Time complexity:O(mn), Space complexity:O(mn) * current position just care about it's left one and top one * */ fun uniquePaths(m: Int, n: Int): Int { val dp = Array(m + 1) { IntArray(n + 1) { 0 } } return topDownSolution(m, n, dp) } private fun topDownSolution(x: Int, y: Int, dp: Array<IntArray>): Int { if (x == 0 || y == 0) { return 0 } if (x == 1 && y == 1) { return 1 } if (dp[x][y] > 0) { return dp[x][y] } var res = 0 for (i in 0 until x) { for (j in 0 until y) { val topPath = topDownSolution(x, y - 1, dp) val leftPath = topDownSolution(x - 1, y, dp) res = topPath + leftPath } } dp[x][y] = res return res } }