LeetCode题解(0688):“马”在棋盘上的概率(Python)

LeetCode题解 专栏收录该内容
1914 篇文章 5 订阅

题目:原题链接(中等)

标签:动态规划

解法时间复杂度空间复杂度执行用时
Ans 1 (Python) O ( N 2 × K ) O(N^2×K) O(N2×K) O ( N 2 ) O(N^2) O(N2)168ms (73.86%)
Ans 2 (Python)
Ans 3 (Python)

解法一:

class Solution:
    def knightProbability(self, n: int, k: int, r: int, c: int) -> float:
        def get_next(x1, y1):
            res = []
            for (x2, y2) in [(x1 - 2, y1 - 1), (x1 - 2, y1 + 1), (x1 - 1, y1 + 2), (x1 + 1, y1 + 2),
                             (x1 + 2, y1 + 1), (x1 + 2, y1 - 1), (x1 + 1, y1 - 2), (x1 - 1, y1 - 2)]:
                if 0 <= x2 < n and 0 <= y2 < n:
                    res.append((x2, y2))
            return res

        now = [[0] * n for _ in range(n)]
        now[r][c] = 1
        for _ in range(k):
            next = [[0] * n for _ in range(n)]
            for i1 in range(n):
                for j1 in range(n):
                    if now[i1][j1]:
                        for (i2, j2) in get_next(i1, j1):
                            next[i2][j2] += now[i1][j1]
            now = next

        return sum(sum(row) for row in now) / 8 ** k
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值