定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。 如把字符串abcdef左旋转2位得到字符串cdefab。思路:如左旋转2位,则先“反转”这2位,然后“反转”剩下的N-2位,最后“反转”全部N位。
/// <summary>
/// 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
/// 如把字符串abcdef左旋转2位得到字符串cdefab。
/// </summary>
/// <param name="a">操作数组</param>
/// <param name="n">数组长度</param>
/// <param name="k">左旋转位数</param>
static void Test(int[] a, int n, int k)
{
k %= n;
if (k == 0) return;
Reverse(a, 0, k - 1);
Reverse(a, k, n - 1);
Reverse(a, 0, n - 1);
}
/// <summary>
/// 反转
/// </summary>
/// <param name="a">操作数组</param>
/// <param name="begin">反转开始位置</param>
/// <param name="end">反转结束位置</param>
static void Reverse(int[] a, int begin, int end)
{
while (begin < end)
{
int temp = a[end];
a[end] = a[begin];
a[begin] = temp;
begin++;
end--;
}
}
转载自 http://blog.csdn.net/zxz414644665/article/details/6535613