一键建站系统源码,开源oa办公系统,在视频网站中做节目怎么挣钱,wordpress商城版1. 转换小写字母
LeetCode709#xff1a;给你一个字符串s#xff0c;将该字符串中的大写字母转换成相同的小写字母#xff0c;返回新的字符串。 每个字母都是有确定的ASCII的#xff0c;可以根据码表操作子字符串#xff0c;常见的ASCII范围是#xff1a; a-z: 97-122, …1. 转换小写字母
LeetCode709给你一个字符串s将该字符串中的大写字母转换成相同的小写字母返回新的字符串。 每个字母都是有确定的ASCII的可以根据码表操作子字符串常见的ASCII范围是 a-z: 97-122, A-Z: 65-90, 0-9: 48-47 将大写字母转换为小写字母只需在原来的ASCII基础上加上32即可 代码
public static String toLowerCase(String s){int n s.length();//将字符串转换为字符数组char[] chars s.toCharArray();for (int i 0; i n; i) {if (chars[i] 65 chars[i] 90){chars[i] 32;}}String str new String(chars);return str;}
2. 字符串转换整数
LeetCode8. 本体的题目较长看原文
请你来实现一个myAtoi(string s)函数使其能将字符串转换成一个32位有效符号整数类似C/C中的atoi函数。
函数myAtoi的算法如下 读入字符串并丢弃无用的前导空格 检查下一个字符假设还未到字符末尾为正还是负号读取该字符如果有。 确定最终结果是负数还是正数。 如果两者都不存在则假定结果为正。 读入下一个字符直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。 将前面步骤读入的这些数字转换为整数即123 - 123 0032 - 32。如果没有读入数字则整数为 0 。必要时更改符号从步骤 2 开始。 如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] 需要截断这个整数使其保持在这个范围内。具体来说小于 −231 的整数应该被固定为 −231 大于 231 − 1 的整数应该被固定为 231 − 1 。 返回整数作为最终结果。 注意 本题中的空白字符只包括空格字符 。 除前导空格或数字后的其余字符串外请勿忽略 任何其他字符。 示例 1 输入s 42
输出42
解释加粗的字符串为已经读入的字符插入符号是当前读取的字符。
第 1 步42当前没有读入字符因为没有前导空格^
第 2 步42当前没有读入字符因为这里不存在 - 或者 ^
第 3 步42读入 42^
解析得到整数 42 。
由于 42 在范围 [-231, 231 - 1] 内最终结果为 42 。 示例2 输入s -42
输出-42
解释
第 1 步 -42读入前导空格但忽视掉^
第 2 步 -42读入 - 字符所以结果应该是负数^
第 3 步 -42读入 42^
解析得到整数 -42 。
由于 -42 在范围 [-231, 231 - 1] 内最终结果为 -42 。 示例 3 输入s 4193 with words
输出4193
解释
第 1 步4193 with words当前没有读入字符因为没有前导空格^
第 2 步4193 with words当前没有读入字符因为这里不存在 - 或者 ^
第 3 步4193 with words读入 4193由于下一个字符不是一个数字所以读入停止^
解析得到整数 4193 。
由于 4193 在范围 [-231, 231 - 1] 内最终结果为 4193 。 示例 4 输入s -9923762348723 输出-2147483648 解释 第 1 步-9923762348723当前没有读入字符因为没有前导空格 ^ 第 2 步-9923762348723读入 - 字符所以结果应该是负数 ^ 第 3 步-9923762348723读入 9923762348723 ^ 解析得到整数 -9923762348723 。 由于 -9923762348723 小于范围 [-231, 231 - 1] 内最终结果被截断为 -21474836483 。 如果看懂示例那么这个题目你基本上就会了 几个要点 根据示例1要去掉前导空格 根据示例2有判断去掉空格后的第一个字符为和-的情况默认是用sign标识初始化是1遇到-号的时候修正为-1. 判断是否是数字用ASCII比较0 c 9,0如果在前面要将其去掉。 根据示例3在遇到不是数字的时候要停止 根据示例4要在循环内部判断最后是否超出int类型的范围 注意事项 1. (res Integer.MAX_VALUE / 10 (currchar - 0) Integer.MAX_VALUE % 10) 这段代码判断是最后一位判断当前res再加1位是否会越界 2. res res * 10 sign * (currchar - 0); 代表每次都是带着符号相加负号的话每次相加都是负号 代码 public static int myAtoi(String str){int len str.length();char[] charArray str.toCharArray();//1.去掉空格int index 0;while (index len charArray[index] ){index;}//2.如果已经遍历完成针对极端“ ”全是空格if (index len){return 0;}//3.如果出现符号字符仅第一个有效记录正负int sign 1;char firstchar charArray[index];if (firstchar ){index;} else if (firstchar -) {index;sign -1;}//4.将后面的字符进行转换题目要求不能用long类型int res 0;while (index len){char currchar charArray[index];//4.1 先判断不合法的情况if (currchar 9 || currchar 0){break;}//判断越界情况//提前乘10可能会直接越界所以使用Integer.MAX_VALUE/10,这样一定不会越界//if后面的判断是最后一位判断当前res再加1位是否会越界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 Integer.MIN_VALUE;}//合法的情况把每一步的符号都成进去//想想为什么带着sign乘,-‘0’是将字符转换为整数带上sign乘代表每次都是带着符号相加比如负数就所有负数相加res res * 10 sign * (currchar - 0);index;}return res;}