题目描述
请编写一个函数(允许增加子函数),计算n x m的棋盘格子(n为横向的格子数,m为竖向的格子数)沿着各自边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能往左和往上走。
输入描述:
输入两个正整数
输出描述:
返回结果
示例1
输入
2
2
输出
6
while True:
try:
meshstring = input().split()
x = int(meshstring[0])
y = int(meshstring[1])
result=[[0 for j in range(y+1)] for i in range(x+1)]
for i in range(x+1):
result[i][0] = 1
for j in range(y+1):
result[0][j] = 1
for i in range(1,x+1):
for j in range(1,y+1):
result[i][j] = result[i-1][j] + result[i][j-1]
print(result[-1][-1])
except:
break
递归
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
while(in.hasNext()){
int m=in.nextInt();
int n=in.nextInt();
System.out.println(getPath(m,n));
}
}
public static int getPath(int m,int n){
if (m==0||n==0)
return 1;
return getPath(m-1,n)+getPath(m,n-1);
}
}
动态规划
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
while(in.hasNext()){
int m=in.nextInt();
int n=in.nextInt();
int[][] dp=new int[m+1][n+1];
for(int i=0;i<m+1;i++){
for(int j=0;j<n+1;j++){
if(i==0&&j==0)
dp[i][j]=1;
else if (i==0)
dp[i][j]=dp[i][j-1];
else if(j==0)
dp[i][j]=dp[i-1][j];
else
dp[i][j]=dp[i-1][j]+dp[i][j-1];
}
}
System.out.println(dp[m][n]);
}
}
}