每日一題 LeetCode 63 不同路徑

2021-10-07 19:35:53 字數 899 閱讀 7700

每日一題,防止痴呆 = =

乙個機械人位於乙個 m x n 網格的左上角 (起始點在下圖中標記為「start」 )。

機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(在下圖中標記為「finish」)。

思路這題我一開始傻傻的想到dfs,可能是反應,看到地圖就想dfs和bfs = =,然後也沒考慮時間複雜度就寫了,結果不出意料的tle。

然後拋開dfs的思路,再一看,好像就是很明顯的動態規劃,只需要設dp[i][j]表示從(i, j)處到達終點的路徑條數就可以了,遞推公式如下:

dp[i][j] = obstaclegrid[i][j] ? 0 : dp[i+1][j] + dp[i][j+1]

這裡注意到我們其實在計算dp[i][j]的時候,只用到了它下面和右邊的元素,所以可以用滾動陣列進行優化,將空間複雜度優化為o(cols),cols是列數

ac**

最開始傻傻的dfs方法,寫了就別浪費

class

solution

return res;

}int

uniquepathswithobstacles

(vectorint>>

& obstaclegrid)

}return obstaclegrid[0]

[0]?

0:dfs(obstaclegrid,0,

0);}

};

動態規劃:

class

solution

for(

int i=rows-

2;i>=

0;i--)}

return dp[0]

;}};

每日一題 LeetCode

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...

LeetCode每日一題(題1028)

最近在刷leetcode每日一題,每次做完之後總能有些收穫,所以想著不如每天寫個部落格記錄一下做的題目的解法以及自己寫的時候問題出在 從先序遍歷還原二叉樹 題目大意 給出乙個字串 1 2 3 4 5 6 7 1代表節點的值,前面的 個數代表節點的深度。如果只有乙個子節點,保證這個節點為左子節點。返回...

LeetCode每日一題(題139)

題目 題目大意 給出乙個字串s和乙個字串陣列words,判斷s是否能夠拆分成多個words中的字串。分析 這道題比較簡單的方式應該是採用動態規劃來做。對於任意乙個字串中的區間,可以判斷該區間組成的字串是否在字典中,如果是,則這個區間的真假取決於前面那個區間的真假。給出狀態轉移方程dp i dp j ...