935. 骑士拨号器

935. 骑士拨号器

  • 原题链接:
  • 完成情况:
  • 解题思路:
  • 参考代码:

原题链接:

935. 骑士拨号器
https://leetcode.cn/problems/knight-dialer/description/

完成情况:

935. 骑士拨号器_第1张图片

解题思路:

 题目要求:
    键盘上的数字,随便选择
    输入,代表你要返回的长度

    然后走法只能走L行。

935. 骑士拨号器_第2张图片

参考代码:

package 西湖算法题解___中等题;

import java.util.Arrays;

public class __935骑士拨号器 {
	/**
	 题目要求:
	    键盘上的数字,随便选择
	    输入,代表你要返回的长度

	    然后走法只能走L行。
	 * @param n
	 * @return
	 */
	public int knightDialer(int n) {
		//dp    ->      方法一:动态规划
		//所以输出答案模 109 + 7.
		int mod = 1000000007;
		int [][] moves = new int[][]{
				{4,6},{6,8},{7,9},{4,8},{3,9,0},
				{},{1,7,0},{2,6},{1,3},{2,4}
		};
		int dp_knightDialer [][] = new int[2][10];
		Arrays.fill(dp_knightDialer[0],1);
		for (int hops = 0;hops <n-1;hops++){
			Arrays.fill(dp_knightDialer[~hops & 1],0);
			for (int node = 0;node < 10;node++){
				for (int state:moves[node]){
					dp_knightDialer[~hops & 1][state] += dp_knightDialer[hops & 1][node];
					dp_knightDialer[~hops & 1][state] %= mod;
				}
			}

		}
		long res = 0;
		for (int x :dp_knightDialer[~n & 1]){
			res += x;
		}
		return (int)(res % mod);
	}
}

你可能感兴趣的:(算法知识,#,LeetCode题解,java学习,算法,leetcode,java,数据结构,动态规划)