转换成小写字母
解题思路:
-
观察小写字母和大写字母的 ASCII 码:
- 大写字母 A - Z 的 ASCII 码范围为 [65, 90];
- 小写字母 a - z 的 ASCII 码范围为 [97, 122];
-
小写字母会比大写字母大 32,则直接判断是否当前字母是否在 [65, 90] 区间,在此区间直接加 32 变成小写;
-
[65,96] 对应的二进制表示为 [(01000001)2, (01011010)2]:
- 65 的二进制为(1000001)2,32 对应的二进制表示为 (100000)2,异或之后变成 (1100001)2 十进制为 97;
- 因此可以对 ch 的 ASCII 码与 32 做按位或运算,替代与 32 的加法运算;
复杂度:
-
时间复杂度:O(n),其中 n 是字符串 s 的长度;
-
空间复杂度:O(1),不考虑返回值的空间占用;
代码实现:
var toLowerCase = function (s) {
const res = [];
for (let ch of s) {
// 返回字符的 Unicode 编码
if (ch.charCodeAt() >= 65 && ch.charCodeAt() <= 90) {
// 将 Unicode 编码转为一个字符
ch = String.fromCharCode(ch.charCodeAt() | 32);
}
res.push(ch);
}
return res.join('');
};
441.排列硬币
上一篇