题解 | #走方格的方案数#

走方格的方案数

https://www.nowcoder.com/practice/e2a22f0305eb4f2f9846e7d644dba09b

n行m列的格子正好有(n+1)(m+1)个终点,dp[n][m]正好表示到达n行m列格子终点的路径数,最左和最上边缘线上的实际不会作为终点的点可用于边界值初始化,因为每个边缘只有一个唯一可能的方向到达边缘上的点,使用路径数都为1,对于其他终点,每个终点只有可能从左边或者上边的终点到达。

import java.util.Scanner

fun main(args: Array<String>) {
    val read = Scanner(System.`in`)
    val res = read.nextLine().split(' ').map {
        it.toInt()
    }
    val h = res[0]
    val v = res[1]
    val dp = Array(h + 1) {index1->
        Array(v + 1) {
            if (index1 == 0 || it== 0) 1 else 0
        }
    }

    for (i in 1 ..h) {
        for (j in 1 .. v) {
            dp[i][j] = dp [i-1][j] + dp[i][j-1]
        }
    }
    println(dp[h][v])
}

空间压缩:

因为每一个dp[i][j]只与前一个dp值或上一个dp值相关,所以可以采用大小为列数m+1的一维数组循环写入m次得到最终dp值,初始化为全为1,从左到右遍历

import java.util.Scanner

fun main(args: Array<String>) {
    val read = Scanner(System.`in`)
    val res = read.nextLine().split(' ').map {
        it.toInt()
    }
    val h = res[0]
    val v = res[1]
    val dp = Array(v + 1) {
            1
        }

    for (i in 1 ..h) {
        for (j in 1 .. v) {
            dp[j] = dp [j-1]+ dp[j]
        }
    }
    println(dp[v])
}

全部评论
娟疯嘞娟疯嘞,大半夜三点写题解,疯嘞疯嘞
点赞 回复 分享
发布于 2024-02-27 04:07 河南

相关推荐

紫色心情:第二页的内容感觉没啥用,要不都删了吧,有四六级把四六级写上,简历写一页就好了。项目感觉写的很好耶,要不再压缩压缩,突出亮点。还有项目放上面,专业技能放下面好一些。
点赞 评论 收藏
分享
05-23 19:33
重庆大学 Java
只学了传统后端,马上去后端实习了,在想要不要学习agent开发相关的。27秋招和26相比难度如何?
我连备胎都不是却还在...:就暑期实习而言,大厂官宣hc 比 26 多,但是我观察看应该低于 26 的,估计秋招也不简单
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务