【发布时间】:2016-07-19 07:17:11
【问题描述】:
我正在尝试将列表向右旋转特定数量的位置。我认为数组(或列表)旋转可以看作是一个圆形,这意味着从末端掉落的元素会环绕到开头,反之亦然。一个很好的例子可能是如果我们有一个数组或列表,然后我们将它向右旋转三个位置,结果如下:
初始数组(或列表):20、30、40、50、60、70
向右旋转 3 个位置:50、60、70、20、30、40。
根据我对这个概念的了解,我已经编写了一些代码。我想知道,手动执行此操作的正确方法是什么(无需任何花哨的代码或 LINQ),因为它将帮助我更好地理解它。
我要的是手动方法来解决这个问题,而不是任何花哨的东西。
public void Test8(List<int> items, int places)
{
int[] copy = new int[items.Count];
items.CopyTo(copy, 0);
for (int i = 0; i < items.Count; i++)
{
int RotateRight = (i + places) % items.Count;
items[i] = copy[RotateRight];
}
}
【问题讨论】:
-
我在您发布的内容中看不到花哨的代码。以上大部分内容都可以用 C 或 C++ 编写。
-
这里值得参考 Skeet:stackoverflow.com/a/9948241/4880924