688. 骑士在棋盘上的概率 - Kotlin 动态规划
                
            
             
        
            
            
Problem: 688. 骑士在棋盘上的概率 
思路
设为第i次移动时,棋子停留在的可能性
由于不论是否会走出棋盘,棋子向八个方向移动的概率都为0.125
对于第i次情况的每一个位置,枚举其可能移动到的位置,对于其中那些停留在棋盘上的情况,其i+1次的可能性即为
最终输出第k次情况下棋盘上所有位置的可能性之和即可
复杂度
时间复杂度:  
空间复杂度:  
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
   | class Solution {     fun knightProbability(n: Int, k: Int, row: Int, column: Int): Double {         val dp = Array(k + 1) { Array(n) { DoubleArray(n) { (0).toDouble() } } }         dp[0][row][column] = (1).toDouble()
          for (i in 0 until k) {             for (r in 0 until n) {                 for (c in 0 until n) {                     if (r - 1 >= 0 && c - 2 >= 0) dp[i + 1][r - 1][c - 2] += dp[i][r][c] * 0.125                     if (r - 2 >= 0 && c - 1 >= 0) dp[i + 1][r - 2][c - 1] += dp[i][r][c] * 0.125                     if (r - 1 >= 0 && c + 2 < n) dp[i + 1][r - 1][c + 2] += dp[i][r][c] * 0.125                     if (r + 2 < n && c - 1 >= 0) dp[i + 1][r + 2][c - 1] += dp[i][r][c] * 0.125                     if (r + 1 < n && c - 2 >= 0) dp[i + 1][r + 1][c - 2] += dp[i][r][c] * 0.125                     if (r - 2 >= 0 && c + 1 < n) dp[i + 1][r - 2][c + 1] += dp[i][r][c] * 0.125                     if (r + 1 < n && c + 2 < n) dp[i + 1][r + 1][c + 2] += dp[i][r][c] * 0.125                     if (r + 2 < n && c + 1 < n) dp[i + 1][r + 2][c + 1] += dp[i][r][c] * 0.125                 }             }         }
          var sum = (0).toDouble()         for (r in 0 until n) {             for (c in 0 until n) {                 sum += dp[k][r][c]             }         }         return sum     } }
  |