方格走法 蘑菇街笔试题

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 热度指数:3083
 
校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。

题目描述

有一个X*Y的网格,小团要在此网格上从左上角到右下角,只能走格点且只能向右或向下走。请设计一个算法,计算小团有多少种走法。给定两个正整数int x,int y,请返回小团的走法数目。

输入描述:

输入包括一行,空格隔开的两个正整数x和y,取值范围[1,10]。

输出描述:

输出一行,表示走法的数目
示例1

输入

复制
3 2

输出

复制
10

思路:dp思路,起始点到该点的方案数等于起始点到左相邻点的方案数加上起始点到上相邻点的方案数
 1 package text;
 2 
 3 import java.util.Arrays;
 4 import java.util.Scanner;
 5 import java.util.concurrent.CountDownLatch;
 6 
 7 public class Class {
 8     public static void main(String[] args) {
 9         int x, y;//网格的左上角坐标为(0,0),右下角坐标为(x,y)
10         Scanner scanner = new Scanner(System.in);
11         x = scanner.nextInt();
12         y = scanner.nextInt();
13         System.out.println(dfs(x, y));
14     }
15     
16     public static int dfs(int x, int y) {
17         if (x<0 || y<0) {//超越网格边界返回0
18             return 0;
19         }
20         if (x==0 && y==0) {//如果起始点为相邻点,则从起始点过来只有一种方案
21             return 1;
22         }
23         
24         return dfs(x-1, y) + dfs(x, y-1);//起始点到该点的方案数等于起始点到左相邻点的方案书加
25     }//上上相邻点的方案数
26 }
 
原文地址:https://www.cnblogs.com/hemeiwolong/p/12341646.html