算法通关村第十二关|青铜|字符串转换整数
1.转换成小写字母
原题:力扣709.
字符串大写转小写有现成的API使用,但是我们也可以自己来实现。
使用或运算进行加操作能提高效率,因为 32 对应的二进制表示为 00100000 ,而大写字母的范围 [65, 90] 的二进制表示在 00100000 的为 1 的位置均为 0 ,所以直接或操作就可以实现和加 32 一样的效果。
class Solution {
public String toLowerCase(String s) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (ch >= 65 && ch <= 90) {
ch |= 32;
}
sb.append(ch);
}
return sb.toString();
}
}
2.字符串转换整数(atoi)
原题:力扣8.
用 index 遍历字符串数组。
public int myAtoi(String str) {
int len = str.length();
char[] charArray = str.toCharArray();
int index = 0;
while (index < len && charArray[index] = ' ') {
index++;
}
if (index == len) {
return 0;
}
int sign = 1;
char firstChar = charArray[index];
if (firstChar == '+') {
index++;
} else if (firstChar == '-') {
index++;
sign = -1;
}
int res = 0;
while (index < len) {
char currChar = charArray[index];
if (currChar > '9' || currChar < '0') {
break;
}
// 处理溢出情况
if (res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && (currChar - '0') > Integer.MAX_VALUE % 10)) {
return Integer.MAX_VALUE;
}
if (res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE / 10 && (currChar - '0') > -(Integer.MIN_VALUE % 10))) {
return Integet.MIN_VALUE;
}
// 为了便于处理溢出情况,每次给 res 赋值都带 sign ,保证 res 的正负性
res = res * 10 + sign * (currChar - '0');
index++;
}
return res;
}
如果对您有帮助,请点赞关注支持我,谢谢!❤
如有错误或者不足之处,敬请指正!❤
个人主页:星不易 ❤
算法通关村专栏:不易|算法通关村 ❤