百度2018年春招编程题第二题解析
今年百度第二题相对简单,有人用动态规划做,但是用简单的递归方式在几分钟之内就可以写出答案,以下两张图片就是考试时候的图片,是手机拍下来的,可能质量不太好。想必网上已经有相关的文档了。
其实我们可以把它理解成一个多叉树的查找问题。树这种查找结构用递归的方式很好解决,并且代码也很简洁。我是使用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