今年百度第二題相對簡單,有人用動態規劃做,但是用簡單的遞歸方式在幾分鐘之內就可以寫出答案,以下兩張圖片就是考試時候的圖片,是手機拍下來的,可能質量不太好。想必網上已經有相關的文檔了。
其實我們可以把它理解成一個多叉樹的查找問題。樹這種查找結構用遞歸的方式很好解決,並且代碼也很簡潔。我是使用python語言編寫的,通過了他們給的用例,現在我把我寫的答案貼出來,供大家參考。
import numpy as np def n_m(data, sx, sy, n, m): s1 = 0 s2 = 0 s3 = 0 s4 = 0 if sy - 1 >= 1: s1 = data[sx - 1][sy - 2] if sy + 1 <= n: s2 = data[sx - 1][sy] if sx - 1 >= 1: s3 = data[sx - 2][sy - 1] if sx + 1 >= 1: s4 = data[sx][sy - 1] cur = data[sx - 1][sy - 1] if cur >= max(max(s1, s2), max(s3, s4)): return cur else: if s1 > cur: return n_m(data, sx, sy - 1, n, m) if s2 > cur: return n_m(data, sx, sy + 1, n, m) if s3 > cur: return n_m(data, sx - 1, sy + 1, n, m) if s4 > cur: return n_m(data, sx + 1, sy + 1, n, m) test = np.array([[1, 5, 2], [0, 4, 9]]) # test = np.array([[2, 1], # [1, 3]]) print('out_put:', n_m(test, 1, 1, 2, 2))
輸出結果------> out_put: 5