[LeetCode]Valid Number有效数字
来源:互联网 发布:支持mac系统的网游 编辑:程序博客网 时间:2024/05/01 02:30
这道题是leetcode一个大坑,之前做过一次,总是差一点,后来放弃了。。今天拿出来终于写出来了
逻辑是:
1.首先把两边空格去掉
2. 判断下有没有正负号,如果有,跳过
3. 设置3个flag, 是不是Num,有没有"e",有没有" ."
这段逻辑稍微绕点,特别是当你一点点往下写,还不知道test case里到底有什么,最后就越来越乱,我重写的时候没看以前代码,这样还好点。。
首先分析下,什么是一个valid的number:
(1)"."只能有一个但是必须和数存在 只有一个".",false, '1.' true, '.2' true, '..' false '2.5' true
(2)"e"只有有一个,必须两边都有数,而且e后面的数可以有正负号"1e-10" true, 'e9' false, '7e' false
(3)"e" 和 '.' 可以有"45.e9",true, 但是不可以"45e9." why?我也不知道,我总觉"45.e9"也不是很对
如果我们知道了通关条件就是上面3个,那么就好办了
按照逻辑来,我们只要每次判断s.charAt(index)当前位置的字符char是什么就可以了,这样我们可以储存状态,通过状态来判断是否是一个有效数字
public static boolean isNumber(String s) {if (s == null)return false;int start = 0, end = s.length() - 1;while (start <= end && s.charAt(start) == ' ') {start++;}while (end >= start && s.charAt(end) == ' ') {end--;}if (start > end)return false;boolean hasNum = false;boolean hasE = false;boolean hasDot = false;if (s.charAt(start) == '+' || s.charAt(start) == '-') {start++;}// first judge +/-while (start <= end) {if (s.charAt(start) >= '0' && s.charAt(start) <= '9') {// is numberhasNum = true;} else if (s.charAt(start) == 'e') {if (hasE || !hasNum)return false;hasE = true;hasNum = false;} else if (s.charAt(start) == '.') {if (hasDot || hasE)return false;hasDot = true;} else if (s.charAt(start) == '+' || s.charAt(start) == '-') {if (s.charAt(start - 1) != 'e')return false;} else {return false;}start++;}return hasNum;}
0 0
- [LeetCode]Valid Number有效数字
- 【LeetCode】- Valid Number(有效数字)
- leetCode 65.Valid Number (有效数字)
- LeetCode OJ 之 Valid Number (有效数字的判断)
- [Lintcode]Valid Number有效数字
- Valid Number 判断一个数字是否有效
- LeetCode 65. Valid Number(校验数字)
- 有效Valid Number .
- 有效数判定 Valid Number
- Valid Number 判断一个string是不是有效地数字表达式 @LeetCode
- Leetcode 65. Valid Number 验证数字 解题报告
- LeetCode: Valid Number
- LeetCode : Valid Number
- Leetcode: Valid Number
- [Leetcode] Valid Number
- leetcode 50: Valid Number
- [LeetCode] Valid Number
- 【leetcode】Valid Number
- 饮用净水处理工程:不锈钢直饮水设备的控制原理
- appframework学习--nav的使用说明
- cf451c
- Apache phoenix
- 察觉出卡号磁卡好惨卡号卡号从
- [LeetCode]Valid Number有效数字
- rpmbuild报错Installed (but unpackaged) file(s) found ?
- JS 控制页面超时后自动跳转到登陆页面
- 啊擦考察考核猜猜看哈卡持卡出口
- 关于Relay Log无法自动删除的问题(Neither --relay-log nor --relay-log-index were used)
- 设计模式原则详解
- 服务器的散热和Linux中温度的检测
- HTML部分标签2
- Android应用之——微信微博第三方sdk登录分享使用过程中的一些常见问题