Codility每周一课:P2.2 CyclicRotation

Codility每周一课:P2.2 CyclicRotation_第1张图片
L2.png

P2.2 CyclicRotation
Rotate an array to the right by a given number of steps.

  • P2.2 旋转
    数组旋转给定次数

由N个整数组成的数组A。数组的一次旋转就是每个元素均向右移动一个位置,数组的最后一个元素移动到第一个位置。

例如,数组A=[3,8,9,7,6],经过1次的循环旋转就为[6,3,8,9,7],经过2次的循环旋转就变为[7, 6, 3, 8, 9]。

编写函数:

def solution(A, K)

给定一个由N个整数组成的数组A和一个整数K,则返回一个旋转K次的数组。
例如,给定A=[3、8、9、7、6],K=3,函数应返回[9、7、6、3、8]。
三次旋转如下:
[3,8,9,7,6]->[6,3,8,9,7]
[6,3,8,9,7]->[7,6,3,8,9]
[7,6,3,8,9]->[9,7,6,3,8]
例如,给出A=[0, 0, 0],K=1,函数应返回[0,0,0];
给出A=[1,2,3,4],K=4,函数应返回[1、2、3、4]。

假定:

  1. N和K是范围0至100内的整数;
  2. 数组A的每个元素都是[-1000,1000]内的整数;
  3. 主要考察正确性,算法的性能不是重点;
  • 解题思路

计算每个元素移动后的索引值,对于一个长度为N的数组,只要KmodN的值相同,结果就是一样的。

  • Python3代码
# -*- coding:utf-8 -*-
# &Author  AnFany
# Lesson 2:Arrays
# P 2.2 CyclicRotation


def solution(A, K):
    """
    返回数组A经过K次旋转后的数组
    :param A: 数组
    :param K: 旋转次数
    :return: 旋转后的数组
    """
    length = len(A)
    new_list = A.copy()
    if K == 0 or length == K or length == 0:
        return new_list
    else:
        times = K % length
        for index, value in enumerate(A):
            new_list[(times + index) - length] = value
        return new_list
  • 结果
image
image

点击获得更多编程练习题。欢迎Follow,感谢Star!!! 扫描关注微信公众号pythonfan,获取更多。

image
image

你可能感兴趣的:(Codility每周一课:P2.2 CyclicRotation)