📜个人简介 |
⭐️个人主页:摸鱼の文酱博客主页🙋♂️
🍑博客领域:java编程基础,mysql
🍅写作风格:干货,干货,还是tmd的干货
🌸精选专栏:【Java】【mysql】 【算法刷题笔记】
🎯博主的码云gitee,平常博主写的程序代码都在里面。
🚀支持博主:点赞👍、收藏⭐、留言💬
🍭作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!
📃求路径总数
🎯1.原题链接
🎯2.题目要求
请计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)从棋盘左上角出发沿着边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能往左和往上走。
样例输入: 2 2
样例输出: 6
🎯3.基础框架
java版本的基础框架代码如下:
数学方法,相当于一共要走(n+m)步,其中往右走要走n步,问题是在(n+m)步里哪些步是
往右走。相当于在(n+m)个中取m个有多少种组合的问题。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
}
}
🎯4.解题思路
1.1. 对于上面的nm(33)的格子,有两种情况
a. 如果n或者m为1,则只有一行或者一列,从左上角走到右下角的路径数为n + m
比如: 1 * 1格子,可以先向下走,再向右走,到达右下角;或者先向右走,再向下走,到达右下角,共两条,即 1 + 1 = 2
b. 如果n,m都大于1,那么走到[n][m]格子的右下角只有两条路径,
<1>: 从[n - 1][m]格子的右下角向下走,到达
<2>: 从[n][m - 1]格子的右下角向右走,到达
所以走到[n][m]格子的右下角的数量为[n-1][m] + [n][m - 1],可以通过递归实现,情况a为递归的终止条件
🎯5.完整代码
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
//输入多组样例,所以要循环读出
while(sc.hasNext()){
int n=sc.nextInt();
int m=sc.nextInt();
System.out.println(med(m,n));
}
}
public static int med(int n,int m){
//当m==1或者n==1的时候总的路径数为m+n
if((n==1&&m>=1)||(m==1&&n>=1)){
return m+n;
}
return med(n-1,m)+med(n,m-1);
}
}