LeetCode688:類似576

1、注意結束條件
2、注意步數=0的情況

代碼:

package com.leetCode.dp;

public class leet688 {
	/**
	 * 注意走0步的情況
	 * r和c都在原地,走1步的情況
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println(knightProbability(1,1,0,0));
	}
	static double y=0;
	static double s=0;
	static int m=0;
    public static double knightProbability(int N, int K, int r, int c) {
    	double ans=0.0;
    	if(K==0) return 1.0;
    	int[][][] dp = new int[N][N][K+1];
    	for(int i=0;i<N;i++)
    	{
    		for(int j=0;j<N;j++)
    		{
    			for(int k=0;k<=K;k++)
    			{
    				dp[i][j][k]=-1;
    			}
    		}
    	}
    	find(N,K,r,c,dp);
//    	System.out.println(s+" "+y);
    	s=Math.pow(8, K);
    	ans=y/s;
    	return ans;
    }
	private static void find(int n, int k, int r, int c, int[][][] dp) {
		m++;
		if(k<0)
		{
			s++;
			return ;
		}
		if(r<0||c<0||r>=n||c>=n)
		{
			return ;
		}
		if(r>=0&&c>=0&&r<n&&c<n&&k==0)
		{
			System.out.println(r+" "+c);
			s++;
			y++;
			if(m==1) y--;
			return ;
		}
		if(dp[r][c][k]==-1)
		{
			find(n,k-1,r+1,c+2,dp);
			find(n,k-1,r+1,c-2,dp);
			find(n,k-1,r-1,c+2,dp);
			find(n,k-1,r-1,c-2,dp);
			find(n,k-1,r+2,c+1,dp);
			find(n,k-1,r+2,c-1,dp);
			find(n,k-1,r-2,c+1,dp);
			find(n,k-1,r-2,c-1,dp);
		}
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章