一道比较老套的题目: 在一个宾馆里住着六个不同国籍的人,他们分别来自美国、德国、英国、法国、俄罗斯和意大利。他们的名字叫 A、B、C、D、E、F。名字的顺序与上面的国籍不一定相互对应。
通过上述描述,判断 A、B、C、D、E、F 各是哪国人? 这种类型的题目有很多,时不时地会在智力测验、招聘笔试、公务员行测里出现。常见形式还有谁说了假话、谁是什么职业、谁站在谁左/右边……如果用编程来解决的话,其实都是一样的套路。 期待各位同学提交解答。 提交代码可以使用 paste. 或 codeshare.io 等代码分享网站,只需将代码复制上去保存,即可获得一个分享地址,非常方便。 往期问题可通过公众号菜单栏“课外辅导”栏目中进入查看。 【解答】矩阵旋转 该题目存在一行代码的简单解法,将矩阵逆序处理之后再转置即可。如下所示: def rotate(matrix):
'''
: type matrix : List(List(Int))
: rtype: List(List(Int))
'''
return zip(*matrix[::-1]) 原理如下: 1 2 3 4 5 6 7 8 9 ↓ 7 8 9 4 5 6 1 2 3 ↓ 7 4 1 8 5 2 9 6 3 另外一种方法理解起来稍微容易,但代码看起来就相对复杂了。思路是直接对 4 条边上的 4 个位置进行交换。如题目中所给的矩阵所示,四个角的数字分别为 [1,3,9,7] 交换后为 [7,1,3,9]。如此循环,逐层处理,最后得到结果: def rotate(matrix):
length = len(matrix) 除了以上两种方法,其他同学也提出了不同的解决方案: @cheng_y 同学的答案采用了两两换位的方式: https://paste./25345391/ @王凌鸿 同学也是相似的思路: https://paste./25339267/ @jzy丶 同学使用了 numpy 来解决: https://github.com/Noir-desir/every-weekend/blob/master/matrix.py @strawhat、@聂宇威 等同学也提交了成功的解法。 |
|