189. Rotate Array
向右旋转:
Input: [1,2,3,4,5,6,7] and k = 3
Output: [5,6,7,1,2,3,4]
Explanation:
rotate 1 steps to the right: [7,1,2,3,4,5,6]
rotate 2 steps to the right: [6,7,1,2,3,4,5]
rotate 3 steps to the right: [5,6,7,1,2,3,4]
注意求模
public void rotate(int[] nums, int k) {
if (nums == null || nums.length == 0) return;
int length = nums.length;
k = k % nums.length; // 3 [1,2]
reverse(nums, 0, length - 1);
reverse(nums, k, length - 1);
reverse(nums, 0, k - 1);
}
public void reverse(int[] nums, int l, int r) {
while (l < r) {
int tmp = nums[l];
nums[l] = nums[r];
nums[r] = tmp;
l++;
r--;
}
}
向左旋转
abcXYZdef --- left 3 ------> XYZdefabc
public String LeftRotateString(String str,int n) {
if (str == null || str.length() == 0) return "";
char[] arr = str.toCharArray();
int length = str.length();
n = n % length;
reverse(arr, 0, n - 1);
reverse(arr, n, length - 1);
reverse(arr, 0, length - 1);
return new String(arr);
}
public void reverse(char[] arr, int l, int r) {
while (l < r) {
char tmp = arr[l];
arr[l] = arr[r];
arr[r] = tmp;
l++;
r--;
}
}
public String LeftRotateString(String str,int n) {
if (str == null || str.length() == 0) return "";
int length = str.length();
int s = n % length;
str += str;
return str.substring(s, length + s);
}