// 数组循环移位
// 数组长度为n,循环移位k
public class Test
{
public static void main(String[] args)
{
String str = "abcd1234";
for (int i = 1; i <= 10; i++)
{
rightShift1(str.toCharArray(), i);
}
System.out.println("----------------------");
for (int i = 1; i <= 10; i++)
{
rightShift2(str.toCharArray(), i);
}
}
/**
* 每次元素移动1位,循环k次(如果k>n,移sF动k次和移动k%n结果相同)
*/
public static void rightShift1(char[] ch, int k)
{
int length = ch.length;
k = k % length;
while (k-- > 0)
{
char temp = ch[length - 1];
for (int i = length - 1; i > 0; i--)
{
ch[i] = ch[i - 1];
}
ch[0] = temp;
}
System.out.println(ch);
}
/**
* 右移k位的过程就是把数组的两部分交换一下 "abcd1234" "1234abcd"
*/
public static void rightShift2(char[] ch, int k)
{
int length = ch.length;
k = k % length;
reverse(ch, 0, length - k - 1);
reverse(ch, length - k, length - 1);
reverse(ch, 0, length - 1);
System.out.println(ch);
}
/**
* 数组中元素逆序
* @param ch 数组
* @param i 逆序开始位置
* @param j 逆序结束位置
*/
public static void reverse(char[] ch, int i, int j)
{
for (; i < j; i++, j--)
{
char temp = ch[i];
ch[i] = ch[j];
ch[j] = temp;
}
}
}
编程之美_012数组循环移位
最新推荐文章于 2021-02-18 20:45:17 发布