前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【每周一坑】矩阵旋转

【每周一坑】矩阵旋转

作者头像
Crossin先生
发布2018-04-17 11:04:29
7610
发布2018-04-17 11:04:29
举报

每N周一坑(N>=1)又来啦!之前我们玩过一次矩阵【每周一坑】螺旋矩阵,今天继续来做矩阵相关的操作:

题目说明

给定一个 N * N 的矩阵(N >= 0),将其顺时针旋转 90°.输出处理之后的矩阵。

举例:

1 2 3

4 5 6

7 8 9

7 4 1

8 5 2

9 6 3

附加要求

在不创建新矩阵的情况下做变换,即所有的修改都在原矩阵上直接进行。

代码语言:javascript
复制
def ratate(matrix):
    '''
    : type matrix : List(List(Int))
    : rtype: List(List(Int))
    '''
    # your code here
    
m1 = [[]]
m2 = [[1]]
m3 = [[i for i in range(3)] for j in range(3)]
m4 = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]

assert ratate(m1) == [[]]
assert ratate(m2) == [[1]]
assert ratate(m3) == [[0, 0, 0], [1, 1, 1], [2, 2, 2]]
assert ratate(m4) == [[13, 9, 5, 1], [14, 10, 6, 2], [15, 11, 7, 3], [16, 12, 8, 4]]

期待各位同学提交解答。

提交代码可以使用 paste.ubuntu.com 或 codeshare.io 等代码分享网站,只需将代码复制上去保存,即可获得一个分享地址,非常方便。

【解答】阿姆斯特朗数

上期题目中有个错误:阿姆斯特朗数应该是一个N位正整数等于其各个数字的N次方和,而不是固定的三次方。不好意思,感谢各位同学的指正。

提供一种思路:

  1. 把数字转成字符串
  2. 每一位数字 ** 字符串长度(乘方),将结果累加
  3. 判断结果和原数值是否相等
  4. 循环执行

参考解答:

代码语言:javascript
复制
def judge_arms(i):
    # 将该数转换为字符串 123 -> '123'
    tem = str(i)
    # 按照 n位正整数等于其各位数字的n次方 进行求和
    # sum = 1**3 + 2**3 + 3**3
    tem_sum = sum([int(j)**len(tem) for j in tem])
    # 判断求和之后的数是否和原数相等
    if i == tem_sum:
        return True

'''
寻找小于 1000 的阿姆斯特朗数
逐一遍历小于 1000 的数
判断是否为阿姆斯特朗数
'''
def arms(N):
    for i in range(1, N+1):
        if judge_arms(i):
            print(i)

arms(1000)

'''
附加题: 输入一个正整数,输出距离它最近的阿姆斯特朗数。
以指定的数为基准,同时向前向后寻找阿姆斯特朗数
找到即返回该数
'''
def near_arms(N):
    forward, backward = N, N
    while True:
        if judge_arms(forward):
            return forward
        elif judge_arms(backward):
            return backward
        forward += 1
        backward -= 1

r = near_arms(100000)
print(r)

本期提交答案的同学很多(因为拖得时间久啊……),选出两份比较有代表性的:

@王任 同学写的比较精简,参考地址: http://paste.ubuntu.com/25238978/

@成仙 同学写的比较直观,容易理解,各部分代码清楚: https://paste.ubuntu.com/25268753/

其他同学比如 @Betterment、@Will、@strawhat、@uznEnehC、@H. Lecter…… 也都完成了题目,这里不一一展示。感谢大家的积极参与!

  • 点击左下角“阅读原文”,可查看Python教程及更多学习资源
  • 代码问题请在论坛 bbs.crossincode.com 上发帖提问
  • 欢迎加入讨论交流群组共同学习进步
  • 别忘将我们的文章转发朋友圈或在知乎上为我们的专栏点赞,你们的支持将会让编程教室做得更好:)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Crossin的编程教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目说明
  • 附加要求
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档