国庆节最后一天,还是得还欠下的债。数组刷完啦,开始刷字符串,刚开始比较简单,就刷两道吧,也就花了1,2个小时。
反转字符串
题目描述
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnhbqj/
思路
思路:前后一直换
代码实现
public void reverseString(char[] s) {
for (int i = 0; i < s.length / 2; i++) {
char temp = s[i];
s[i] = s[s.length - i - 1];
s[s.length - i - 1] = temp;
}
}
整数反转
题目描述
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnx13t/
思路
思路1:转换成字符串翻转,转回来抛异常返回0
思路2:不断将原数字最后一位,当做新数字的第一位,除以10取余,乘以10加上去余数。可以先用long型存,看结果在不在Integer范围内。(违反了题目要求)
代码实现
// 思路1
public int reverse1(int x) {
boolean positive = x >= 0;
x = Math.abs(x);
StringBuilder tempX = new StringBuilder(String.valueOf(x));
tempX = tempX.reverse();
if (!positive) {
tempX.insert(0, "-");
}
try {
x = Integer.parseInt(String.valueOf(tempX));
return x;
} catch (NumberFormatException e) {
return 0;
}
}
// 思路2
public int reverse2(int x) {
long newInt = 0;
while (x != 0) {
newInt = newInt * 10 + x % 10;
x /= 10;
}
return (int) newInt == newInt ? (int) newInt : 0;
}