1、数组反转
如:{1,2,4}反转后的数组为{3,2,1}。
算法描述:将第1个数和第n个数替换,第2个数和第n-1个元素替换,直到左边元素索引大于右边。
private static void reverseArr(int[] arr) {
for (int start = 0, end = arr.length - 1; start < end; start++, end--) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
}
2、单个字母反转
如:“2hello”反转后为“olleh2”
算法1:使用StringBuilder将其加入容器,在进行反转。
算法2:将该字符串转成字符数组,然后使用上面介绍的数组反转方法对字符数组进行反转,最后使用String的构造函数将字符数组转成字符串。
算法1的代码如下:
private static void reverseSingleStr1(String str) {
StringBuilder sb = new StringBuilder();
sb.append(str);
sb.reverse();
}
算法2代码:
private static void reverseSingleStr2(String str) {
//不用sb.reverse()方法实现
char[] arr = str.toCharArray();
System.out.println(arr);
for (int i = 0, end = arr.length - 1; i < end; i++, end--) {
char temp = arr[i];
arr[i] = arr[end];
arr[end] = temp;
System.out.println(arr[i]+":"+arr[end]);
}
System.out.println(new String(arr));
}
3、多个字母反转 -句子反转
如:将"how are you? i am fine, thanks!"逆序输出->"!thanks ,fine am i ?you are how"
算法:将其转换成字符串数组,在逆序将字符串加入容器,期间需对每个字符串的字符判断是否有特殊字符, 有的话将该字符放到该单词的前面.
private static void reverseStrings() {
String sentence = "how are you? i am fine, thanks!";
String[] str = sentence.split(" ");
StringBuilder sb = new StringBuilder();
sb.append("\"");
for (int i = 0; i < str.length; i++) {
String s = str[str.length - 1 - i];// 倒序取单词
if (i != str.length - 1) {
char[] arr = s.toCharArray();
int j = arr.length - 1;
// 判断每个字符串的最后一个元素是否是字母
if ((arr[j] >= 'a' && arr[j] <= 'z')
|| (arr[j] >= 'A' && arr[j] <= 'Z')) {
} else {
// 不是字母
s = arr[j] + s.substring(0, j);
}
sb.append(s + " ");
} else {// 第一个元素
sb.append(s);
}
}
sb.append("\"");
System.out.println(sb.toString());
}
4、整数反转
算法:模十取余法,每次取该整数的最低位,每取一次舍去最低位,直到该整数等于0。
private static void reverseInt(int num) {
int sum = 0;
while (num != 0) {
int d = num % 10;
sum = sum * 10 + d;
num /= 10;// 每取模一次,该整数最后一位去掉
}
System.out.println(sum);
}