python魔方程序算法_python魔方程序算法_python算法(一)

# 算法_01_顺时针打印矩阵

## Question

如果一个3x3的矩阵[ [123] [456] [789] ]

按照从外向里以顺时针的顺序依次打印出每一个数字,那么得到的结果是()

%!C. 123698745!%

## Analysis

可以模拟魔方逆时针旋转的方法,一直做取出第一行的操作

例如

1 2 3

4 5 6

7 8 9

输出并删除第一行后,再进行一次逆时针旋转,就变成:

6 9

5 8

4 7

继续重复上述操作即可

尝试使用算法实现:

# 算法_02_两个链表的第一个公共节点

## Question

如果有两个链表存在公共节点,第一个链表的长度为10,第二个链表的长度为5,

那么公共节点在第一个链表中可能的位置是()

%!A. 0!%

%!B. 2!%

%!C. 4!%

%!D. 6!%

----

## Answer

@!D!@

----

## Analysis

共同节点,意味着从共同节点开始之后所有的节点数都是相同的,这是链表,只要有一个共同节点,那么之后所有的指向

也是重复的。先依次遍历两个链表,记录两个链表的长度m和n,如果 m > n,那么我们就先让长度为m的链表走m-n个结点,然后

两个链表同时遍历,当遍历到相同的结点的时候停止即可。对于 m < n,同理。

# 算法_04_丑数

## Question

把只包含因子2、3和5的数称作丑数(Ugly Number)。那么75前一个和后一个的丑数分别是()

%!A. 64, 80!%

%!B. 73, 77!%

%!C. 72, 80!%

%!D. 64, 81!%

----

## Answer

@!C!@

----

## Analysis

按顺序把每个丑数放在数组中,求下一个丑数

下一个丑数必定由有数组中的某一个丑数A * 2, B * 3, C * 5 的中的最小值得来。

分析:在数组中必定有一个丑数M2, 在它之前的数 * 2 都小于当前最大丑数, 在它之后的数 * 2都大于当前最大丑数,

同样有M3, M5

Tips:题目的意思应该是质数因子,因为8的因子有1,2,4,8,显然不符合要求的,但是质数只有2

# 算法_06_和为s的两个数字

## Question

输入一个递增排序的数组和一个数字S,在数组中查找两个数,他们的和正好是S

请补全以下代码

```

class Solution:

def FindNumbersWithSum(self, array, tsum):

if array == None or len(array) <= 0 or array[____] + array[____] < tsum:

return []

start = 0

end = len(array) - 1

while start < end:

if array[start] + array[end] < tsum:

start ____ 1

elif array[start] + array[end] > tsum:

end ____ 1

else:

return [array[start], array[end]]

return []

```

%!A. -1, -2, += , -=!%

%!B. 0, -1, +=, -=!%

%!C. 0, 1, -=, +=!%

%!D. -2, -1, -=, +=!%

----

## Answer

@!A!@

----

## Analysis

设定两个指针,一个指向数组的起点,一个指向数组的终点,然后对两个数字求和,如果和大于目标值,则把后一个指针前移,

如果和小于目标值,则把前一个指针后移。两个指针交汇的时候如果还没找到,就终止操作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值