08字符串转整数
题目描述:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
分析:
本题主要是字符串的处理。需要注意以下几点:
所以在具体处理的时候,你可以截取一个字符然后直接转成一个数字类型(考虑越界)但是并不推荐。这里个人使用遍历字符串数字字符时候将其与'0'
字符差转换成数字进行计算,当超出int范围直接停止。
通过代码为:
public static int myAtoi(String str) {
int zheng = 1;
int index=0;
long value=0;
while (index<str.length()&&str.charAt(index)==' ') {//防止"" 和 " "等
index++;
}
if(index>str.length()-1)return 0;
if(str.charAt(index)=='+') {index++;}
else if (str.charAt(index)=='-') {
zheng=-1;index++;
}
for(int j=index;j<str.length();j++)
{
if(str.charAt(j)>='0'&&str.charAt(j)<='9')
{
value=value*10+str.charAt(j)-'0';
if(value*zheng>Integer.MAX_VALUE)return Integer.MAX_VALUE;
if(value*zheng<Integer.MIN_VALUE)return Integer.MIN_VALUE;
}
else {
break;
}
}
value=zheng*value;
return (int)value;
}
描述:
示例 1:
输入: 121 输出: true
示例 2:
输入: -121 输出: false 解释: 从左向右读, 为 -121 。从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。
分析: 此题比较简单,需要考虑以下几点:
提供两种方法:第一种将数字转成字符串,从中间向两侧拓展比较。
在这里插入图片描述
实现代码为:
//11%
public boolean isPalindrome(int x) {
if(x<0)return false;
String va=x+"";
int left=0,right=0;
if(va.length()%2==0)
{
left=va.length()/2-1;right=left+1;
}
else {
left=va.length()/2;right=left;
}
while (left>=0) {
if(va.charAt(left)!=va.charAt(right))
return false;
left--;right++;
}
return true;
}
但很遗憾这种方法效率比较低只能打败11%的人呢,大概18ms左右。
但是可以换一种思路,使用字符串比较效率较低。可以使用数字类型计算一遍得到逆向数值然后进行比较最终值是否相同:
在这里插入图片描述
public boolean isPalindrome(int x) {
if(x<0)return false;
int team=x;
int va=0;
while (x>0) {
va=va*10+x%10;
x/=10;
}
if(va==team)return true;
return false;
}
这样就大概9-10ms左右,9ms大概打败98%而10ms只40%多。