有一个 X*Y 的网格,小团要在此网格上从左上角到右下角,只能走格点(也即格子的顶点)且只能向右或向下走。请设计一个算法,计算小团有多少种走法。给定两个正整数 int x , int y ,请返回小团的走法数目。
数据范围:
var a = readline().split(" "); var x = +a[0]; var y = +a[1]; var arr = []; for(let i=0; i<=x; i++){ arr[i] = []; for(let j=0; j<=y; j++){ if(i===0&&j===0){//[0][0]位置是0 arr[i][j] = 0; }else if(i===0||j===0){//横坐标或纵坐标为0的都只有一种可能 arr[i][j] = 1; }else { arr[i][j] = 0; } } } for(let i=1; i<=x; i++){ for(let j=1; j<=y; j++){ arr[i][j] = arr[i-1][j]+arr[i][j-1];//倒着想每一步都有两种可能,从上面下来的或者是从左边过来的 } } console.log(arr[x][y]);虽然我觉得我这个有点麻烦了,不过思路比某个要好懂一些~
while(line = readline()){ var lines = line.split(' '); var a = parseInt(lines[0]), b = parseInt(lines[1]); function cellCount(x,y){ var arr =[]; //每个格点初始化为1 for(var i=0; i<=x;i++){ arr[i]=[]; for(var j=0; j<=y;j++){ arr[i][j] = 1; } } //每个格点的值是其左边和上边格点值的和 for(var i=1;i<=x;i++){ for(var j=1;j<=y;j++){ arr[i][j] = arr[i-1][j] + arr[i][j-1]; } } return arr[x][y]; } print(cellCount(a,b)); }