这应该是跳台阶的二维问题:
可以这么考虑:
图片说明
由上图可知,我们逆向分析,从左上角走到右下角和从右下角(2,2)走到左上角(1,1)是一个道理,所以我们利用上台阶的思想从右下往回分析。

我们从(2,2)回到(1,1)有两条路(2,2)-->(1,2)-->(1,1) , (2,2)-->(2,1)-->(1,1),分别标上了序号1和序号2。
也就是说从从右向左相当于x-1,从下到上相当于y-1,那么到(2,2)的方法数就相当于(1,2)的方法数+(2,1)的方法数,当x==1或者y==1的时候,就说明我们已经到了与起点(1,1)临近的几个点。

int countWays(int x, int y) {//二维的上台阶问题,代码很简单,就两行。
        if((x==1||y==1))return 1;
        return countWays(x-1,y)+countWays(x,y-1);
}