题目描述
给定一个 n×mn×m 的方格阵,沿着方格的边线走,从左上角 (0,0)(0,0) 开始,每次只能往右或者往下走一个单位距离,问走到右下角 (n,m)(n,m) 一共有多少种不同的走法。
输入格式
共一行,包含两个整数 nn 和 mm。
输出格式
共一行,包含一个整数,表示走法数量。
数据范围
1≤n,m≤101≤n,m≤10
输入样例:
2 3
输出样例:
10
思路
根据题目的意思我们可以将到达每个点可选的方案转换成如下的矩阵,通过观察可知除边界的点为一组方案外,其余各点都可以转换成上面一个点加上左边那个点的方案数的总和
这里我采用的是递归的方式来实现的,如果数据量比较大的话,我们也可以改成非递归的方式
我们可以提前先生成一个这样的二维数组,然后直接在上面做运算。
代码实现
#include <bits/stdc++.h>
using namespace std;
int f(int x, int y){
if(x == 0 || y == 0){
if(x==0 && y==0) return 0;
return 1;
}else{
return f(x-1,y)+f(x,y-1);
}
}
int main(){
int n,m;
cin >> n >> m;
cout << f(n,m) << endl;
return 0;
}
时间复杂度: O(n)
空间复杂度: O(n)