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);
}

results matching ""

    No results matching ""