您的位置:首页 > 其它

字符串或者数组的循环左移或右移(不开辟额外的空间存放中间值)

2016-09-04 16:40 375 查看
对于的这样的问题,我刚开始是有点蒙逼的,感觉不开辟额外的空间怎么实现额。。。后来想起来以前老师有提过不用额外的空间交换两个数据的算法,顿时感觉有思路了。说白了数组的左移就是一个交换的过程,既然能做到不用额外的空间交换数据,那数组的左移也是可以实现的。

先说说不用额外的空间实现两个数据的交换:

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 数据 string
相关文章推荐