练习题15:网格走法数目

题目描述

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

输入描述:

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

输出描述:

输出包括一行,为走法的数目。

Java解法:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class test06 {
/*
动态规划
对于x*Y网格,dp[i][j]表示(i,j)位置一共有多少种走法,
由于只能向左和向右走,所以第一列和第一行所有位置的走法都是1,即dp[i][0]=1,dp[0][j]=1(0=<i<=x,0<=j<=y),
对于其他位置,走法应该等于其左边格点的走法和其上面格点的走法之和,dp[i][j]=dp[i-1][j]+dp[i][j-1],
*/
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String [] str = br.readLine().split(" ");
int x = Integer.parseInt(str[0]);
int y = Integer.parseInt(str[1]);
int data = deal(x, y);
System.out.println(data);
}

private static int deal(int x, int y) {
int [][] arr = new int[x+1][y+1];
for (int n=0; n<=x; n++) {
arr[n][0] = 1;
}
for (int m=0; m<=y; m++) {
arr[0][m] = 1;
}
for (int i=1; i<=x; i++) {
for (int j=1; j<=y; j++) {
arr[i][j] = arr[i-1][j] + arr[i][j-1];
}
}
return arr[x][y];
}
}

猜你喜欢

转载自www.cnblogs.com/HwyStudy/p/9198202.html