思路:k=2则划分区间为:abc de
第一步:abc->cba
第二步 : de->ed
第三步:整体逆转:deabc
注:左移是相同的思想
//将N个字符的数组,循环右移K位。时间复杂度O(N)。
#include<iostream>
#include<stdlib.h>
using namespace std;
void Reverse(char *arr, int left, int right)
{
while (left < right)
{
swap(arr[left], arr[right]);
left++;
right--;
}
}
void MoveKToRight(char *arr,int size,int k)
{
//思路:k=2则划分区间为:abc de 第一步:abc->cba 第二步:de->ed 第三步:整体逆转:deabc
if (arr == NULL || size < 0 || k < 0)
return;
Reverse(arr, 0, size - k - 1);
Reverse(arr,size-k, size - 1);
Reverse(arr, 0, size - 1);
}
int main()
{
char arr[] = "abcde";
size_t size = strlen(arr);
MoveKToRight(arr, size, 2);
system("pause");
return 0;
}