题目链接:https://ac.nowcoder.com/acm/contest/6779/A
题意
- 有一个1~n的序列A,现在将其循环右移k次,得到序列B
- 反转操作是将某一区间的字符反转,比如12345要将[2,4]反转,得到14325
- 问最后将序列A反转几次后得到序列B
思路
- 多写几个就会得到结果
先让k对n取余,得到1相对平移的个数,然后将最终状态反转到初始状态,反转次数一样
当k==0时,说明不需要反转就能得到
当n==2时,如果k!=0那么就是1,反转一次就能得到
当k<=2或者n-k<=2时,反转两次。举个栗子:
7123456->7 654321->1234567
6712345->6 543217->123456 7
2345671->765432 1->1234567
3456712->176543 2->1 234567
其他情况反转三次就好了。同样举个栗子:
5671234->765 1234->765 4321->1234567
4567123->7654 123->7654 321->1234567
AC代码
class Solution {
public:
/**
*
* @param n int整型 字符串长度n
* @param k int整型 循环右移次数k
* @return int整型
*/
int solve(int n, int k) {
// write code here
k%=n;
if(k==0)return 0;
if(n==2)return 1;
if(k<=2||n-k<=2)return 2;
return 3;
}
};