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; }
09回文数
描述:
- 回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 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%多。
最后
本周打开结束,本周打开题解为: