1. 程式人生 > >矩陣中從左上角到右下角的路徑條數

矩陣中從左上角到右下角的路徑條數

題目:給定一個n*m矩陣,求從左上角到右下角總共存在多少條路徑,每次只能向右走或者向下走。
解法一:和上一篇文章的思想相似,在此不再重複敘述。
int uniquePaths(int m, int n) 
{
	if (m <= 0 || n <= 0)
		return 0;
	vector<int> data(n,1);
	int cur = 0;
	for(int i = 1; i < m; ++i)
	{
		cur = 1;
		for(int j = 1; j < n; ++j)
		{
			cur = cur + data[j];
			data[j] = cur;
		}
	}
	return data[n - 1];
}
解法二:數學中的組合問題,因為從左上角到右下角,總共需要走n+m-2步,左上角和右下角的元素不考慮在內,我們每次都可以選擇向下走,向下走總共需要m-1步,所以在n+m-2步中選擇m-1步,這是典型的排列組合問題。
int uniquePaths(int m, int n)
{
	int N = n + m - 2;
	int K = n - 1;
	double res = 1.0;
	for (int i = 1; i <= n - 1; ++i)
	{
		res = res * (N - K + i) / i;
	}
	return (int)res;
}