摘要:問一共有多少條獨特的路線思路一通過遞歸實現(xiàn)計算。思路二楊輝三角在思路的指引下,我們可以嘗試將遞歸的方法改變?yōu)檠h(huán)的方法來解決。我們只需要確定在總部數(shù)中哪些步數(shù)右行或是哪些步數(shù)下行即可知道其對應(yīng)的路徑。這里運用到排列組合的思想。
題目要求
A robot is located at the top-left corner of a m x n grid (marked "Start" in the diagram below). The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked "Finish" in the diagram below). How many possible unique paths are there?
Above is a 3 x 7 grid. How many possible unique paths are there? Note: m and n will be at most 100.
一個機(jī)器人站在下標(biāo)為(1,1)的起點走向下標(biāo)為(m,n)的終點。機(jī)器人只允許往下走和往右走。問一共有多少條獨特的路線?
思路一:Dynamic Programming通過遞歸實現(xiàn)計算。根據(jù)題目可知,在任何一個方塊,一共有兩條路徑,一條是往下走,一條是往右走,如果任何一條路徑能夠到達(dá)終點,則返回1,否則返回0。
public int uniquePaths(int m, int n) { return uniquePaths(1,1,m, n); } public int uniquePaths(int currentRow, int currentColumn, int m, int n){ if(currentRow==m || currentColumn==n){ return 1; } return uniquePaths(currentRow+1, currentColumn, m ,n ) + uniquePaths(currentRow, currentColumn+1, m, n); }
同樣的思路,也可以從終點開始往回計算,如果能夠到達(dá)起點,則返回1,否則返回0。
public int uniquePaths2(int m, int n){ if(m==1 || n==1){ return 1; } return uniquePaths2(n-1, m) + uniquePaths2(n, m-1); }
但是,以上這兩種方法都超時了。顯然,當(dāng)我們不需要知道具體路徑選項的時候,遍歷所有的路徑就顯得有些累贅且降低性能。
思路二:楊輝三角在Dynamic Programming思路的指引下,我們可以嘗試將遞歸的方法改變?yōu)檠h(huán)的方法來解決。這里就運用到了數(shù)學(xué)中的楊輝三角。很顯然,最左側(cè)一行和最頂側(cè)一行的到達(dá)路徑數(shù)都是1,而任何一個非該行列的節(jié)點都可以通過左側(cè)節(jié)點和上側(cè)節(jié)點的路徑數(shù)相加得到從起點出發(fā)到達(dá)自己共有的路徑數(shù)。我們可以利用二維數(shù)組來實現(xiàn)疊加。代碼如下:
public int uniquePath3(int m, int n){ int[][] map = new int[m][n]; for(int i = 0; i##思路三: 排列組合 ##
這里運用的是純數(shù)學(xué)的思想。根據(jù)題目可知,從起點到終點的總步數(shù)是一定的,右行或下行的次數(shù)也是一定的。我們只需要確定在總部數(shù)中哪些步數(shù)右行或是哪些步數(shù)下行即可知道其對應(yīng)的路徑。這里運用到排列組合的思想。public int uniquePaths4(int m, int n){ int totalPath = m + n - 2; int down = m-1; int right = n-1; if(down == 0 || right==0){ return 1; } int count = Math.min(down, right); long result = 1; for(int i = 1 ; i<=count ; i++){ result *= totalPath--; result /= i; } return (int) result; }
想要了解更多開發(fā)技術(shù),面試教程以及互聯(lián)網(wǎng)公司內(nèi)推,歡迎關(guān)注我的微信公眾號!將會不定期的發(fā)放福利哦~
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/70157.html
摘要:題目要求這是題目系列。存在路障的節(jié)點會在數(shù)組中被標(biāo)記為。請問從起點到終點有多少條獨立路徑。思路和代碼在的思路基礎(chǔ)上,我們可以知道,如果某個節(jié)點上存在路障,那么任何從該節(jié)點前往終點的路徑都將不存在。也就是說,該節(jié)點的路徑數(shù)為。 題目要求 Follow up for Unique Paths: Now consider if some obstacles are added to the...
摘要:和完全一樣的做法,只要在初始化首行和首列遇到時置零且即可。對了,數(shù)組其它元素遇到也要置零喏,不過就不要啦。 Problem Follow up for Unique Paths: Now consider if some obstacles are added to the grids. How many unique paths would there be? An obstacle...
摘要:動態(tài)規(guī)劃復(fù)雜度時間空間思路因為要走最短路徑,每一步只能向右方或者下方走。所以經(jīng)過每一個格子路徑數(shù)只可能源自左方或上方,這就得到了動態(tài)規(guī)劃的遞推式,我們用一個二維數(shù)組儲存每個格子的路徑數(shù),則。 Unique Paths I A robot is located at the top-left corner of a m x n grid (marked Start in the dia...
摘要:簡單的動規(guī)題目,建立數(shù)組。坐標(biāo)為矩陣的坐標(biāo),值為從左上角到這一格的走法總數(shù)。賦初值,最上一行和最左列的所有格子的走法都只有一種,其余格子的走法等于其左邊格子走法與上方格子走法之和。最后,返回即可。 Problem A robot is located at the top-left corner of a m x n grid (marked Start in the diagram ...
Problem Given a list of directory info including directory path, and all the files with contents in this directory, you need to find out all the groups of duplicate files in the file system in terms o...
閱讀 780·2021-09-30 09:46
閱讀 3792·2021-09-03 10:45
閱讀 3615·2019-08-30 14:11
閱讀 2549·2019-08-30 13:54
閱讀 2260·2019-08-30 11:00
閱讀 2355·2019-08-29 13:03
閱讀 1561·2019-08-29 11:16
閱讀 3588·2019-08-26 13:52