对于的这样的问题,我刚开始是有点蒙逼的,感觉不开辟额外的空间怎么实现额。。。后来想起来以前老师有提过不用额外的空间交换两个数据的算法,顿时感觉有思路了。说白了数组的左移就是一个交换的过程,既然能做到不用额外的空间交换数据,那数组的左移也是可以实现的。
先说说不用额外的空间实现两个数据的交换:
int a=10;
int b=15;
a = a + b;
b = a - b;
a = a - b;
整体的代码如下:
public class LeftRotateString {
public static void main(String[] args) {
System.out.println(change("abcdefgh".toCharArray(),3));
}
public static char[] change(char[] c,int k){
for(int i=0;i<k/2;i++){
/*c[i]^=c[j]^=c[i]^=c[j];*/
int j = k-i-1;
c[i]=(char) (c[i]+c[j]);
c[j]=(char) (c[i]-c[j]);
c[i]=(char) (c[i]-c[j]);
}
for(int n=0;n<(c.length-k)/2;n++){
int j=c.length-1-n;
int i=k+n;
c[i]=(char) (c[i]+c[j]);
c[j]=(char) (c[i]-c[j]);
c[i]=(char) (c[i]-c[j]);
}
for(int i=0;i<c.length/2;i++){
int j=c.length-1-i;
c[i]=(char) (c[i]+c[j]);
c[j]=(char) (c[i]-c[j]);
c[i]=(char) (c[i]-c[j]);
}
return c;
}
}