`
huntfor
  • 浏览: 201292 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

[leetcode]Valid Number

 
阅读更多
新博文地址:[leetcode]Valid Number
Validate if a given string is numeric.

Some examples:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true

Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.

 

这道题没有什么好讲的,主要考察严谨性,不才,提交了六七次才过。case居然认为 .2 也算有效数,囧

我的想法还是很简单,只把false的情况挑出来

1. 先把首位空格去掉;

2. 如果第一位是+、- 符号则将符号去掉,如果是小数点,则将小数点去掉,并记录下来已经包含了小数点hasPoint

3. 接下来遍历处理过的字符串,如果遇到非数字 i

3.1 当 i 为 e \ E时,如果之前已经遇到过e 、E返回false,如果e \ E在字符串的首位位置,返回false,如果e后面的是符号,且符号位于末尾,返回false,符号不在末尾,但是符号后面不是数字,返回false

3.2 当 i 为 '.' 时,如果该小数点之前已经有 小数点 或者e存在,返回false

3.3 除了e 、E以及小数点的所有非数字,全部返回false

遍历结束,返回true

 

代码如下:

        private static final int ASC0 = 48;
	private static final int ASC9 = 57;

	public boolean isNumber(String s) {
		if (s == null || s.isEmpty()) {
			return false;
		}
		boolean hasTag = false;
		boolean hasPoint = false;
		String trim = s.trim();
		if(trim.length() >= 1 && (trim.charAt(0) == '+' || trim.charAt(0)=='-')){
			trim = trim.substring(1);
		}
		if(trim.length() >= 1 && trim.charAt(0) == '.'){
			trim = trim.substring(1);
			hasPoint = true;
		}
		if (trim == null || trim.isEmpty()) {
			return false;
		}
		for (int i = 0; i < trim.length(); i++) {
			if (!isNum(trim.charAt(i))) {
				if ((trim.charAt(i) == 'e' || trim.charAt(i) == 'E')) {
					if (!hasTag) {
						hasTag = true;
					} else {
						return false;
					}
					if (i == trim.length() - 1 || i == 0) {
						return false;
					} else {
						if (trim.charAt(i + 1) == '+' || trim.charAt(i + 1) == '-') {
							if (i + 1 == trim.length() - 1) {
								return false;
							} else {
								i++;
							}
						}
					}
				} else if (trim.charAt(i) == '.') {
					if (!hasPoint && !hasTag) {
						hasPoint = true;
					} else {
						return false;
					}
				}else{
					return false;
				}
			}
		}
		return true;
	}

	private boolean isNum(char a) {
		if (a < ASC0 || a > ASC9) {
			return false;
		}
		return true;
	}

 

 

 

 

分享到:
评论

相关推荐

    java-leetcode题解之Number of Valid Words for Each Puzzle.java

    java java_leetcode题解之Number of Valid Words for Each Puzzle.java

    js-leetcode题解之65-valid-number.js

    javascript js_leetcode题解之65-valid-number.js

    leetcode最难-LeetCode_ValidNumber:因为我疯了,所以我去了LeetCode,并按Hardest:LeastSolv

    leetcode最难LeetCode_ValidNumber 因为我疯了,所以我去了 LeetCode,并按 Hardest:LeastSolved 排序。 没有汗! 语言:C# 我学到的是 这个很疯狂,因为它在定义实际可以算作数字方面确实做得很差。 如果这是面对面...

    LeetCode最全代码

    260 | [Single Number III](https://leetcode.com/problems/single-number-iii/) | [C++](./C++/single-number-iii.cpp) [Python](./Python/single-number-iii.py) | _O(n)_ | _O(1)_ | Medium || 268| [Missing ...

    LeetCode_java_leetcode_刷题_

    3. **字符串处理**:Java中的String类是常考主题,如"Valid Palindrome"要求判断一个字符串是否为回文,这涉及字符串的反转和比较操作。 4. **排序与查找**:快速排序、归并排序、二分查找等经典算法经常出现在...

    Leetcode book刷题必备

    根据提供的文件信息,我们能提炼出一系列IT相关知识点,主要是围绕LeetCode这本电子书的主题——即编程面试题目解答。此电子书内容丰富,涵盖了算法和数据结构中常见的问题及其解决方案,非常适合准备技术面试的读者...

    LeetCode 刷题汇总1

    * 回文数(Palindrome Number):判断数字是否为回文数。 3. 数学运算: * 两个排序数组的中位数(Median of Two Sorted Arrays):计算两个排序数组的中位数。 * 整数到罗马(Integer to Roman):将整数转换为...

    程序员面试宝典LeetCode刷题手册

    第四章 Leetcode 题解 1. Two Sum 2. Add Two Numbers 3. Longest Substring Without Repeating Characters 4. Median of Two Sorted Arrays 7. Reverse Integer 9. Palindrome Number 11. Container With Most ...

    LeetCode各公司题目合集

    - Valid Parentheses:这是一个用来检测字符串中括号是否有效匹配的问题,可以用栈(Stack)数据结构来解决,属于基础的算法题目。 - Two Sum II - Input array is sorted:与前一个Two Sum题目的不同之处在于,本题...

    Leetcode-Solutions:JavaScript 语言的 Leetcode 解决方案

    力码解决方案 Leetcode是一个网站,人们——主要是软件工程师——练习他们的编码技能。 有 800 多个问题(并且还在不断增加),每个问题都有多个解决方案。 问题按难度等级排列:简单、中等和...├── Valid Number │

    leetcode分类-boost-65-valid-number:65.有效号码

    leetcode 分类C++ Boost 演示 观察如何用 . 还要观察标题模板如何“爆炸”出来,即。 我包含了 2 个头文件,并且有一大堆头文件由bcp提取用于静态编译。 OSX 构建说明 通过安装 Boost 和 CMake brew install boost ...

    LeetCode答案大全

    20. Valid Parentheses:判断给定的字符串是否是有效的括号字符串。 LeetCode的答案大全中整理的这些问题,包含了算法面试中经常考察的高频知识点,如数组操作、字符串处理、链表处理、数学问题、回溯算法、动态...

    算法-leetcode-剑指offer上的题很多

    - **验证回文字符串(Valid Palindrome)**: 判断一个字符串是否是回文。 - **最长回文子串(Longest Palindromic Substring)**: 找出字符串中最长的回文子串。 - **通配符匹配(Wildcard Matching)**: 实现通配符‘*’...

    leetcode中国-leetcode:leetcode刷题

    number, hard, 用有限自动机 integer to roman ,easy , 模拟 roman to integer ,easy , 模拟 count and say , easy , 模拟 Anagrams 字符串处理,map Simplify Path,字符串处理,stack Length of Last Word,字符串...

    javalruleetcode-LeetCode::lollipop:个人LeetCode习题解答仓库-多语言

    java lru leetcode :ice_cream: LeetCode ...Valid Parentheses 26 Remove Duplicates from Sorted Array 48 Rotate Image 53 Maximum Subarray 55 Jump Game 56 Merge Intervals 64 Minimum Path Sum 73

    leetcode分类-leetcode:leetcode刷题(中等难度分类)

    字符串处理题目也是LeetCode的重要部分,例如"Reverse Words in a String"(翻转字符串中的单词)和"Valid Palindrome"(验证回文串)。这些题目通常涉及到字符串的遍历、分割、比较以及特殊字符的处理。 四、位...

    最大公共字符串leetcode-leetcode:坚持每周刷一道LeetCode题

    number of nodes along the shortest path from the root node down to the nearest leaf node. 解题思路: 思路一:深度优先遍历,递归遍历左右子树,遇到叶子节点时返回 1,返回过程中,比较左右子树,较小深度...

    颜色分类leetcode-leetcode-[removed]我对Leetcode问题的解决方案

    Number 回文数 11 Container With Most Water 盛最多水的容器 13 Roman to Integer 罗马数字转整数 14 Longest Common Prefix 最长公共前缀 20 Valid Parentheses 有效的括号 26 Remove Duplicates from Sorted ...

    Leetcode部分试题解析

    1. **Valid Anagram**:检查两个字符串是否为彼此的字母异位词。这通常通过计算每个字符串的字符频率并比较它们是否相同来解决,可以使用Python的字典数据结构。 2. **Delete Node in a Linked List**:在链表中...

Global site tag (gtag.js) - Google Analytics