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
我怎样才能改善正确的旋转方式?我应该怎么办左旋一个呢?
由于
答案 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;
}
}
}