方法一:动态规划

dp[i][j]表示到(i,j)的方法数

  1. package main
  2. /**
  3. * @Author: yirufeng
  4. * @Date: 2022/4/28 6:53 下午
  5. * @Email: yirufeng@foxmail.com
  6. * @GitHub: https://www.github.com/sivanWu0222
  7. * @Desc:
  8. **/
  9. func uniquePaths(m int, n int) int {
  10. //基本的动态规划
  11. dp := make([][]int, m)
  12. for i := 0; i < m; i++ {
  13. dp[i] = make([]int, n)
  14. }
  15. //初始化第一行
  16. for i := 0; i < n; i++ {
  17. dp[0][i] = 1
  18. }
  19. //初始化第一列
  20. for i := 0; i < m; i++ {
  21. dp[i][0] = 1
  22. }
  23. for i := 1; i < m; i++ {
  24. for j := 1; j < n; j++ {
  25. dp[i][j] = dp[i-1][j] + dp[i][j-1]
  26. }
  27. }
  28. return dp[m-1][n-1]
  29. }

方法二:状态压缩

//方法二:进行状态压缩之后的
func uniquePaths(m int, n int) int {

    ret := make([]int, n)
    for i := 0; i < n; i++ {
        ret[i] = 1
    }

    for i := 1; i < m; i++ {
        for j := 1; j < n; j++ {
            ret[j] = ret[j-1] + ret[j]
        }
    }

    return ret[n-1]
}