字符串数组元素调换位置 (正向&反向)
输入为一个字符串数组和一个int数组,输出的结果是该字符串数组通过int数组相应变换后得到的数组
For example: 输入["a", "b", "c", "d"] 和 [2, 0, 1, 3], 输出应该为["b", "c", "a", "d"], int数组第0个位置上的值为2, 表示"a"应该放到结果的第2个位置上
每次只要不停的交换字符串数组对应位置的值以及int数组对应位置的值即可,程序如下:
public static String[] getback(String[] s, int[] index) {
for(int i = 0; i < index.length; i++) {
if(index[i] == i) continue;
while(index[i] != i) {
int j = index[i];
swapStr(s, i, j);
swapInt(index, i, j);
}
}
return s;
}
输入为改变后的字符串数组和一个int数组,int数组的index表示原先的index,值表示现在的位置,输出的结果是原字符串
For example: 输入["b", "c", "a", "d"] 和 [2, 0, 1, 3], 输出应该为 ["a", "b", "c", "d"], int数组里第0个的值2表示string数组第2个位置上的值"a" 原先应该在第0个位置上
i = 0, j = index[i] = 2, 而index[j] = 1,表示s[1]上面的"c"应该被换到s[2]上面,所以交换index[j]和j上面的值,相应的index也要变换,把2换到第2位上,交换完成后,j对应的值为"c",已经回到本来的位置上了。同时,开始在第2位上的"a"换到第1个位置上index[0]对应的值也为1,所以a保持正确的位置。下一轮的i = 这一轮的j,所以接着交换上一轮上面index[j]对应的值,依次循环直到当前位置上的值被交换成原先的值为止。
同样是交换对应位置的值,不同的是string数组交换的值变为下一个:
public static String[] getback(String[] s, int[] index) {
for(int i = 0; i < index.length; i++) {
if(index[i] == i) continue;
while(index[i] != i) {
int j = index[i];
swapStr(s, index[j], j);
swapInt(index, i, j);
}
}
return s;
}