【每周一坑】矩阵旋转

本文涉及的产品
云拨测,每月3000次拨测额度
简介: 给定一个 N * N 的矩阵(N >= 0),将其顺时针旋转 90°.输出处理之后的矩阵。

每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


附加要求


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


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. 循环执行

参考解答:


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 上发帖提问
  • 欢迎加入讨论交流群组共同学习进步
  • 别忘将我们的文章转发朋友圈或在知乎上为我们的专栏点赞,你们的支持将会让编程教室做得更好:)


近期文章推荐阅读:

编程新手:看懂很多示例,却依然写不好一个程序

喏,你们要的 PyCharm 快速上手指南

几个以前发过、回复过很多次、比较有用的学习资源

给伸手党的福利:Python 新手引导

如何用100行Python代码做出魔性声控游戏“八分音符酱”

数据分析:当赵雷唱民谣时他唱些什么?

一行代码扫出“敬业福”

我扒了杜蕾斯的微博

Python 爬虫爬取美剧网站

今天,你抢到票了吗?

爆款游戏《贪吃蛇大作战》的 Python 实现

相关文章
|
10月前
|
数据采集 人工智能 机器人
【每周一坑】美队盾牌
顺便说下,因为现在我们的公共交流群人数比较多,没法保证所有的问题都能看到且回答,提个问题能不能正好有人帮你解决还得看运气。因此正在开发群助教AI机器人的问答功能,之后可以缓解这个问题。
|
10月前
|
数据采集 数据挖掘 Python
【每周一坑】田忌赛马
如果你是某公子手下的谋士,已知同级别中己方的马优于田忌的马,事先不知道对方派遣顺序,不过可以根据上一轮对方的派出的马匹制定本轮的选择。为公子制定一种派遣策略,使赢得比赛的几率最大。
|
10月前
|
算法
回溯算法——我欲修仙(功法篇)
回溯算法——我欲修仙(功法篇)
82 0
|
10月前
|
数据采集 数据挖掘 Python
【每周一坑】谁是哪国人?
在一个宾馆里住着六个不同国籍的人,他们分别来自美国、德国、英国、法国、俄罗斯和意大利。他们的名字叫 A、B、C、D、E、F。名字的顺序与上面的国籍不一定相互对应。
|
10月前
|
决策智能
博弈论第十八集总结(“最后通牒和讨价还价”的观后感)
博弈论第十八集总结(“最后通牒和讨价还价”的观后感)
130 0
|
10月前
|
数据采集 数据挖掘 程序员
【每周一坑】程序猿的浪漫
长久以来,大家对程序员的印象是“呆板”、”内向”等,殊不知他们也有浪漫的一面。把找不到对象归因于职业性质,这个锅,面向对象的编程语言不背!(但这个报道真不是来黑程序员的吗……)
|
11月前
|
机器学习/深度学习 算法
种类并查集(蓝桥侦探)
种类并查集(蓝桥侦探)
|
12月前
|
算法 C++ Python
【每日算法Day 68】脑筋急转弯:只要一行代码,但你会证吗?
【每日算法Day 68】脑筋急转弯:只要一行代码,但你会证吗?
|
存储 人工智能 JavaScript
【寒假每日一题】AcWing 4510. 寻宝!大冒险!
目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
102 0
|
算法
每日一题冲刺大厂 第二十三天 奶牛晒衣服
大家好,我是泡泡,给大家带来每日一题的目的是为了更好的练习算法,我们的每日一题为了让大家练到各种各样的题目,熟悉各种题型,一年以后,蜕变成为一个不一样的自己!
107 0