right将给定的字符数组n向右旋转

时间:2017-06-29 22:18:54

标签: java

A)开发方法体

void rightRotate(char [] arr,int n)

该方法将给定的字符数组n向右旋转。

例如,如果arr = {' a',' b',' c',' d',' e& #39; },并且n = 2,那么结果应该是arr = {' d',' e'' a'' b' ,' c'}

B)开发方法的主体

void leftRotate(char [] arr,int n)

左方法将给定的字符数组n向左旋转..

例如,如果arr = {' a',' b',' c',' d',' e& #39;}然后结果应该是arr = {' c',' d',' e',' a',&# 39; b'}

我只学了一个月的java,这是本周的一个小测验。

老师要求我们只使用temp和basic for循环来解决它。

我们无法使用新阵列。

public static void rightRotate(char arr[], int n)
{
    // Your code goes here
  int i;
   if(arr.length>1)
  {
  char p=arr[arr.length-n-1];
  for(i=0;i<n;i++)
     {
        char m= arr[arr.length-n+i];
        arr[arr.length-n-1+i]=arr[i];
        arr[i]=m;
     }
  arr[arr.length-1]=p;
}
}

这是我为正确的旋转而写的。但我无法弄清左旋转一个。

我的代码在测试用例4中有一个错误。

测试案例1: 数组:a b c d e
右旋:d e a b c

测试案例2: 数组:a b c d e f g
右旋:d e f g a b c

测试案例3: 数组:a b
右旋:b a

测试案例4: 数组:a b c d e f g h i j k l m n
右旋:h i j k l m n b c d e f a g

我怎样才能改善正确的旋转方式?我应该怎么办左旋一个呢?

由于

1 个答案:

答案 0 :(得分:0)

实际上你需要两个for循环来执行旋转,一个用于保持旋转数,一个用于移动元素。以下应该有效:

public static void rightRotate(char arr[], int n) {
    int i;
    if (arr.length > 1) {
        for (i = 0; i < n; i++) {
            char p = arr[arr.length - 1];
            //Shift the elements to the right
            for(int j = arr.length-2; j >= 0 ; j--){
                arr[j+1] = arr[j];
            }
            arr[0] = p;
        }
    }
}