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

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

函数原型为:

CountSteps($x,$y)

例如:当$x=1,$y=1,可以画出图如下

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

得到的结果将是 2 种走法

 

public function index(){
		echo $this->index1(10, 10).'<br>';
		$this->index2(10, 10);
	}
	//非递归
	public function index1($x,$y){
		for($i = 0; $i <= $x; $i++){
			$f[$i][0] = 1;
		}
		for($i = 0; $i <= $y; $i++ ){
			$f[0][$i] = 1;
		}
		//print_r($f);exit;
		for($i = 1; $i <= $x; $i++){
			for($j = 1; $j <= $y; $j++){
				$f[$i][$j] = $f[$i-1][$j] + $f[$i][$j-1];
			}
		}
		
		print_r($f[$x][$y]);
	}
	//递归
	public function index2($x,$y){
		if($x==0 && $y==0)
			return 0;
		if ($x == 0 || $y == 0)
			return 1;
		$total = $this->day20_2($x - 1, $y) + $this->day20_2($x, $y - 1);
		return $total;
	}

 

上一篇:167 -两个Sum II - 输入数组已排序


下一篇:交换数组两项