给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左往右旋转),要求在数组上原地旋转,空间复杂度O(1)
static void reverse(char[] str,int offset) { int len = str.Length; if (len == 0) return; char temp = str[0]; char temp2 = str[0]; int curent = 0; int target = 0; int start = 0; for (int i = 0; i < len; i++) { target = (curent + offset) % len; temp2 = str[target];//将原来的值弹出来保存 str[target] = temp;//替换到目标位置为上次弹出来的值 temp = temp2;//保存起来 curent = target; if (start == target) { //如果目标的值是原来起始的位置,当前位置是旋转过的,那就往下走一步 start = (start + 1) % len; curent = start; temp = str[curent]; } } }
看注释。