65. 有效数字

验证给定的字符串是否可以解释为十进制数字。

例如:

“0” => true

" 0.1 " => true

“abc” => false

“1 a” => false

“2e10” => true

" -90e3 " => true

" 1e" => false

“e3” => false

" 6e-1" => true

" 99e2.5 " => false

“53.5e93” => true

" --6 " => false

“-+3” => false

“95a54e53” => false

说明: 我们有意将问题陈述地比较模糊。在实现代码之前,你应当事先思考所有可能的情况。这里给出一份可能存在于有效十进制数字中的字符列表:

数字 0-9

指数 - “e”

正/负号 - “+”/"-"

小数点 - “.”

当然,在输入中,这些字符的上下文也很重要。

更新于 2015-02-10:

C++函数的形式已经更新了。如果你仍然看见你的函数接收 const char * 类型的参数,请点击重载按钮重置你的代码。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/valid-number

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {
char[] chars;
boolean point = false;//是否有小数部分
boolean exponent = false;//是否有指数部分
public boolean isNumber(String s) {
s = s.trim();//去空格
int length = s.length();
if(length == 0){
return false;
}
chars = s.toCharArray();//转字符数组
String[] ss = s.split("e");//以e分隔数组为两部分
if(ss.length == 0){//只有e 错误
return false;
}
if(ss[0].length() == 0) return false;//如果e之前的部分为空 错误
if(ss[0].length() < length) exponent = true;//如果前面部分字符长小于字符串长度,说明有指数部分
if(ss[0].length() == length -1){
return false;
}
String[] pre = ss[0].split("\\.");//以小数点分隔 if(pre.length == 0){//如果只有小数点 错误
return false;
}
if(pre[0].length() < ss[0].length()) point = true;
//如果分隔后前面部分小于原来的长度,说明有小数部分 boolean result = pre(0, pre[0].length());
//整数部分是否正确
result = result && middle(pre[0].length()+1, ss[0].length());
//中间部分是否正确
if(exponent){//如果有指数部分
result = result && is(ss[0].length() +1, length);
//指数部分是否正确
}
return result;
}
public boolean pre(int i, int length){//判断整数部分是否正确
if(i >= length){
//如果整数部分为空 由于.1也是正确的,所以先返回正确
return true;
}
//第一个字符是加减号,i+1
if(chars[i] == '+' || chars[i] == '-') {
i++;
}
if(i == length && !point){
//如果没有小数部分,但是只有正负,返回错误
return false;
}
for(; i < length; i++){
//遍历整数部分
if(chars[i] < '0' || chars[i] > '9'){
//不是0-9就返回错误
return false;
} }
//到这,整数部分就是正确的了
return true;
}
public boolean middle(int i, int length){//小数部分
if(i >= length && point ){
//如果有小数点,但是小数部分为空
if(chars[i - 2] >= '0' && chars[i - 2] <= '9') {
//如果小数点之前有数字返回正确
return true;
}
//没有返回错误
return false;
}
for(; i < length; i++){//遍历中间部分
if(chars[i] < '0' || chars[i] > '9'){
//不是0-9就返回错误
return false;
} }
return true;
}
public boolean is(int i, int length){//指数部分
if(i == 1){
//在进来之前已经判断有指数部分,如果e前面为空,返回错误
return false;
}
//指数部分也可能有正负
if(chars[i] == '+' || chars[i] == '-') {
i++;
}
//之后正负号,返回错误
if( i == length){
return false;
}
for(; i < length; i++){
//遍历指数部分
if(chars[i] < '0' || chars[i] > '9'){
//不是0-9返回错误
return false;
} }
return true;
}
}

Java实现 LeetCode 65 有效数字的更多相关文章

  1. C#版 - Leetcode 65. 有效数字 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. Leetcod ...

  2. [LeetCode] 65. 有效数字

    题目链接 : https://leetcode-cn.com/problems/valid-number/ 题目描述: 验证给定的字符串是否可以解释为十进制数字. 例如: "0"` ...

  3. Java for LeetCode 216 Combination Sum III

    Find all possible combinations of k numbers that add up to a number n, given that only numbers from ...

  4. Java for LeetCode 214 Shortest Palindrome

    Given a string S, you are allowed to convert it to a palindrome by adding characters in front of it. ...

  5. Java for LeetCode 212 Word Search II

    Given a 2D board and a list of words from the dictionary, find all words in the board. Each word mus ...

  6. Java for LeetCode 211 Add and Search Word - Data structure design

    Design a data structure that supports the following two operations: void addWord(word)bool search(wo ...

  7. Java for LeetCode 210 Course Schedule II

    There are a total of n courses you have to take, labeled from 0 to n - 1. Some courses may have prer ...

  8. Java for LeetCode 200 Number of Islands

    Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surro ...

  9. Java for LeetCode 188 Best Time to Buy and Sell Stock IV【HARD】

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

随机推荐

  1. beego中Controller的GetControllerAndAction方法

    beego中Controller的GetControllerAndAction方法 GetControllerAndAction方法在beego中的源码 // GetControllerAndActi ...

  2. uni-app高分开源电影项目源码案例分析,支持一套代码发布小程序、APP平台多个平台(前端入门必看)

    uni-app-Video 一个优秀的uni-app案例,旨在帮助大家更快的上手uni-app,共同进步! Features ​ 代码编写简洁,注释清晰,快速入门必备: 支持在线模糊搜索: 程序类目懒 ...

  3. md5加密相等绕过

    0x01 <?php $md51 = md5('QNKCDZO'); $a = @$_GET['a']; $md52 = @md5($a); if(isset($a)){ if ($a != ' ...

  4. node的http模块

    node中的几个常用核心模块的api返回的都是eventEmitter的实例,也就是说都继承了on和emit方法,用以监听事件并触发回调来处理事件. http模块处理网络请求通常是创建一个server ...

  5. wepy+vant-weapp踩坑记

    最近用了几个月的wepy框架,碰到了挺多问题,这里总结一下 1.clone的代码无法再本地运行,wepy报错 解决方案: 执行命令 : `npm install wepy-cli@1.6.1-alph ...

  6. java web基础第一次作业

    JAVA WEB基础 一.B/S架构 1.B/S架构简介: B是英文单词“Browser”的首字母,即浏览器的意思:S是英文单词“Server”的首字母,即服务器的意思.B/S就是“Browser/S ...

  7. C语言qsort()函数的实现

    #include <stdio.h> void qsort(void * base, int num, int width, int (*comp)(const void *, const ...

  8. 17-4 delete-truncate语句-练习

    --删除数据语句: --delete from 表名 where ... --delete语句如果不加where条件,表示将表中所有的数据都删除,加where条件后,会按照where条件进行删除. - ...

  9. 走迷宫(二):在XX限制条件下,是否走得出

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1728 解题方法:BFS+访问数组vis[][]; 给你起点位置和终点位置,让你判断能不能到达,并且拐弯 ...

  10. Spring全家桶一一SpringBoot与Mybatis

    Spring全家桶系列一一SpringBoot与Mybatis结合 本文授权"Java知音"独家发布. Mybatis 是一个持久层ORM框架,负责Java与数据库数据交互,也可以 ...