文章目录

  • 题目描述
  • 思路 && 代码

题目描述

  • 呃…比较恶心的一道题,需要读好题,分完情况再下手
  • 有看到dalao用有限状态机来做,不过这边还是直接用了我自己的做法= =

思路 && 代码

  • ps:这里没有参考题解的写法,用的是方便自己理解的写法,所以可能代码有冗余,不过复杂度是没问题的~
  • s 分为三部分:part1 = 小数 || 整数,part2 = e/E,part3 = 整数;part23可选
  • 新增两个函数:isInteger() 整数判断,以及 isDecimal() 小数判断
  • 先来一个循环,找到第一个 e / E 的位置,作为 part 的分界点
  • 然后对 part1 进行 小数 or 整数判断,对 part3 进行整数判断即可
  • 注意:无论小数、整数,都需要有数字元素
class Solution {public boolean isNumber(String s) {// inits = s.trim();if(s.length() == 0) {return false;}char[] sArr = s.toCharArray();// 数值 = 小数 or 整数 + (可选) e or E + 整数int eIndex = s.length();for(int i = 0; i < s.length(); i++) {if(sArr[i] == 'e' || sArr[i] == 'E') {eIndex = i;}}// 第一部分为整数 or 小数boolean part1 = (isInteger(sArr, 0, eIndex - 1) || isDecimal(sArr, 0, eIndex - 1));// 可选:第二部分为整数if(eIndex != s.length()) {// 后不跟整数的情况if(eIndex == s.length() - 1) {return false;}part1 = part1 && isInteger(sArr, eIndex + 1, s.length() - 1);}return part1;}public boolean isInteger(char[] arr, int start, int end) {int numsCount = 0;// 符号位处理int index = start;if(arr[index] == '-' || arr[index] == '+') {index++;}// 元素处理for(; index <= end; index++) {if(arr[index] < '0' || arr[index] > '9') {return false;}numsCount++;}// 存在数字才算整数return numsCount > 0;}public boolean isDecimal(char[] arr, int start, int end) {int index = start;if(arr[index] == '-' || arr[index] == '+') {index++;}int pointNums = 0, numCount = 0;for(; index <= end; index++) {if(arr[index] == '.') {pointNums++;continue;}else if(arr[index] < '0' || arr[index] > '9') {return false;}numCount++;}// 只有一个小数点,并且存在数字的情况才是小数return pointNums == 1 && numCount != 0;}
}

【LeetCode笔记】剑指 Offer 20. 表示数值的字符串(Java、字符串)相关推荐

  1. 【LeetCode】剑指 Offer 20. 表示数值的字符串

    [LeetCode]剑指 Offer 20. 表示数值的字符串 文章目录 [LeetCode]剑指 Offer 20. 表示数值的字符串 package offer;import java.util. ...

  2. leetcode剑指 Offer 20. 表示数值的字符串

    请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100"."5e2"."-123"."3.1416&q ...

  3. [剑指offer]面试题第[38]题[JAVA][字符串的排列][回溯法]

    [问题描述][中等] 输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素.示例: 输入:s = "abc" 输出:[&quo ...

  4. 【LeetCode】剑指 Offer 16. 数值的整数次方

    [LeetCode]剑指 Offer 16. 数值的整数次方 文章目录 [LeetCode]剑指 Offer 16. 数值的整数次方 package offer;public class Soluti ...

  5. Leetcode刷题笔记——剑指offer II (五)【二分、排序、回溯】

    这里写目录标题 二分查找 剑指 Offer II 069. 山峰数组的顶部 剑指 Offer II 070. 排序数组中只出现一次的数字 剑指 Offer II 071. 按权重生成随机数 剑指 Of ...

  6. 【LeetCode】剑指 Offer 32 - III. 从上到下打印二叉树 III

    [LeetCode]剑指 Offer 32 - III. 从上到下打印二叉树 III 文章目录 [LeetCode]剑指 Offer 32 - III. 从上到下打印二叉树 III package o ...

  7. 【LeetCode】剑指 Offer 07. 重建二叉树

    [LeetCode]剑指 Offer 07. 重建二叉树 文章目录 [LeetCode]剑指 Offer 07. 重建二叉树 package offer;import java.util.ArrayD ...

  8. 【leetcode】 剑指 Offer学习计划(java版本含注释)(上)

    目录 前言 第一天(栈与队列) 剑指 Offer 09. 用两个栈实现队列(简单) 剑指 Offer 30. 包含min函数的栈(简单) 第二天(链表) 剑指 Offer 06. 从尾到头打印链表(简 ...

  9. 《LeetCode力扣练习》剑指 Offer 10- II. 青蛙跳台阶问题 Java

    <LeetCode力扣练习>剑指 Offer 10- II. 青蛙跳台阶问题 Java 一.资源 题目: 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总 ...

最新文章

  1. SLAM之特征匹配(三)————RANSAC------LO-RANSAC Algorithm
  2. 当当创始人李国庆谈吴秀波事件:呼吁释放陈昱霖 应核查税收
  3. 万能门店小程序_关于传统门店开发微信小程序的优势
  4. linux twm,linux 命令缩写解析
  5. 【AI视野·今日NLP 自然语言处理论文速览 第一期】Fri, 4 Jun 2021
  6. linux grub 删除文件,删除grub的方法(转)
  7. 机器学习之KNN 算法
  8. java基础总结06-常用api类-包装类
  9. Eclipse Java注释模板设置详解以及版权声明
  10. Bentley.Hammer.XM.v08.09.400.34 1CD(水锤和瞬态分析软件)好用版\
  11. 帝国cms会员注册页跳过选择注册会员类型
  12. GridView样式设置
  13. 作业一:数据软件系统的介绍及spss的操作简介
  14. redis介绍命令性能数据及监控缓存穿透
  15. 计算机内部为什么采用二进制表示数据,计算机内部为什么使用二进制处理数据? - 问答库...
  16. 面试专题之:微服务场景
  17. 数据湖技术Hudi0.10master测试流程
  18. 【干货】python xlwt写入excel操作
  19. 创建在Linux上运行的 .NET Core 应用程序(matlab封装的dll文件)
  20. 1万条xml文件的写入,附加杂类知识

热门文章

  1. 冯·诺依曼计算机特点
  2. MATLAB保存当前窗口图像
  3. JavaSE——流程控制(接收输入Scanner、分支结构(if与switch)、循环结构(while、do-while与for))
  4. ❤️ 给你的Linux把把脉(内存、磁盘、CPU、网络)❤️
  5. 《底层逻辑》--思维导图
  6. 台湾计算机读研,台湾省计算机考研_会考教育名副其实
  7. AES算法重点详解和实现
  8. 为什么CAP不能同时满足的简单理解
  9. BigDecimal的异常记录:java.lang.ArithmeticException: Rounding necessary
  10. CoreAnimation编程指南(三)几何变换