题解 | #走方格的方案数#
走方格的方案数
https://www.nowcoder.com/practice/e2a22f0305eb4f2f9846e7d644dba09b
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextInt()) { int a = in.nextInt(); int b = in.nextInt(); System.out.println(cal(0, 0, a, b)); } } public static int cal(int m, int n, int a, int b) { if (m < a && n < b) {//由题意限制,ab肯定同时大于0,这是正确的 return cal(m + 1, n, a, b) + cal(m, n + 1, a, b); } else if (m == a && n < b) {//到最下面一排了 if (n + 1 == b)//相邻一格 return 1; return cal(m, n + 1, a, b); } else if (n == b && m < a) {//到最右边一列 if (m + 1 == a)//相邻一格 return 1; return cal(m + 1, n, a, b); } return 0;//格式限制,没啥用 } }
用递归,每一步时,要到达下一步,只能下m+1或者右n+1,即f(a,b)=f(a-1)+f(b-1); 到边界就只能执行某一个,没到边界就都要加;
到最后一步的上一步时就得1输出就行了