字符串的翻转
看算法总是让我很头疼,我面对递归,面对一些复杂的思维,常看很久以一种效率极低的方式学习。好多好多看不懂的,我甚至都在怀疑自己了,不是学习算法的料子,但是没有基本的算法功底,怎样能做成程序员呢? 再加上三月份的蓝桥杯,CSP认证。诶。只能硬着头皮 继续前行呀 = =
有一道题自己能用三种方法写出,虽然很简单,但是还是很想记录下来。
第一种:(:运用了StringBuilder的reverse函数)
代码如下
public static void f4reverse(String s) {
StringBuilder stringBuilder = new StringBuilder(s);
StringBuilder stringBuilder2=stringBuilder.reverse();
System.out.println(stringBuilder2);
}
第二种: 递归
(我发现我不会如何将图片旋转= = )
找相同点:取到字符串的最后一个字母,运用递归,依次拼接上字符串的倒数第二个字母。 代码为:s.charAt(end)+f4_2(s, end-1);
找边界点:当end的值逐渐减小到0时,此时返回的值是字符串的第一个字母。
public static String f4_2(String s,int end) {
if(end == 0){
return ""+s.charAt(0);
}
return s.charAt(end)+f4_2(s, end-1);
}
第三种:递归 (把字符串转变为字符数组)
把字符串转变为字符数组,正好温故了一下 toCharArray()方法。这种题解的思路是:把第一个字母与后面相邻字符交换,此处用到循环,第一个字母需要交换char.length-1次数即可到达最后的位置。然后再将原字母的第二个字母(也就是经过第一次交换后的首字母)与后面相邻字母交换,交换的次数为char.length-1-1。
代码如下
/**
* f4(s):翻转字符串
* 找重复:将每个字母与后面一个字母交换
* 找变量:交换次数递减1。
* 找边界:当交换次数为1的时候为出口
*/
public static void f4(char[] c,int begin) {
if(begin==c.length-1){
for(int i =0;i<c.length;i++){
System.out.print(c[i]);
}
return;
}
char temp;
for(int i = 0;i<c.length-1-begin;i++){
temp = c[i]; c[i] = c[i+1]; c[i+1] = temp;
}
f4(c,begin+1);
}