牛牛的字符反转
神仙题目 做的时候1000多发就十几个人过 自己做的时候也没想全所有情况,老菜狗了
题解
- 1234567->6543217->7123456 先在[1,6]之间反转,最后整体[1,7]反转。至少2次
- 1234567->6543217->6712345 先在[1,6]之间反转,最后在[2,7]之间反转。至少2次
- 1234567->4321567->4321765->5671234 先在[1,4]反转,再[5,7]反转,最后整体反转。至少3次
- 1234567->3214567->3217654->4567123 先在[1,3]反转,再[4,7]反转,最后整体反转。至少3次
- 1234567->1765432->2345671 先在[2,7]之间反转,最后整体反转。至少2次
- 1234567->1765432->3456712 先在[2,7]之间反转,最后在[1,6]之间反转。至少2次
- 1234567->1234567 无需区间反转。至少0次
由上面可知最多只需要翻转3次,最少是0次,两次的情况是最大的或者最大的和第二大的在头的位置(
那时候真的没考虑到第二大的在最前面时候还能这样转,果然还是得写的细一点)还需要特判一下n==1或者n==2的情况 剩下的看上面应该都能懂了。
class Solution {
public:
/**
*
* @param n int整型 字符串长度n
* @param k int整型 循环右移次数k
* @return int整型
*/
int solve(int n, int k) {
// write code here
int f;
f=k%n;
if (n == 1)return 0;
if(n==2&&f==1)return 1;
else if(f==1||f==2||f==n-1||f==n-2)return 2;
else if(f>1)return 3;
else if(f==0)return 0;
}
};