【LeetCode笔记】剑指 Offer 20. 表示数值的字符串(Java、字符串)
文章目录
- 题目描述
- 思路 && 代码
题目描述
- 呃…比较恶心的一道题,需要读好题,分完情况再下手
- 有看到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、字符串)相关推荐
- 【LeetCode】剑指 Offer 20. 表示数值的字符串
[LeetCode]剑指 Offer 20. 表示数值的字符串 文章目录 [LeetCode]剑指 Offer 20. 表示数值的字符串 package offer;import java.util. ...
- leetcode剑指 Offer 20. 表示数值的字符串
请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100"."5e2"."-123"."3.1416&q ...
- [剑指offer]面试题第[38]题[JAVA][字符串的排列][回溯法]
[问题描述][中等] 输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素.示例: 输入:s = "abc" 输出:[&quo ...
- 【LeetCode】剑指 Offer 16. 数值的整数次方
[LeetCode]剑指 Offer 16. 数值的整数次方 文章目录 [LeetCode]剑指 Offer 16. 数值的整数次方 package offer;public class Soluti ...
- Leetcode刷题笔记——剑指offer II (五)【二分、排序、回溯】
这里写目录标题 二分查找 剑指 Offer II 069. 山峰数组的顶部 剑指 Offer II 070. 排序数组中只出现一次的数字 剑指 Offer II 071. 按权重生成随机数 剑指 Of ...
- 【LeetCode】剑指 Offer 32 - III. 从上到下打印二叉树 III
[LeetCode]剑指 Offer 32 - III. 从上到下打印二叉树 III 文章目录 [LeetCode]剑指 Offer 32 - III. 从上到下打印二叉树 III package o ...
- 【LeetCode】剑指 Offer 07. 重建二叉树
[LeetCode]剑指 Offer 07. 重建二叉树 文章目录 [LeetCode]剑指 Offer 07. 重建二叉树 package offer;import java.util.ArrayD ...
- 【leetcode】 剑指 Offer学习计划(java版本含注释)(上)
目录 前言 第一天(栈与队列) 剑指 Offer 09. 用两个栈实现队列(简单) 剑指 Offer 30. 包含min函数的栈(简单) 第二天(链表) 剑指 Offer 06. 从尾到头打印链表(简 ...
- 《LeetCode力扣练习》剑指 Offer 10- II. 青蛙跳台阶问题 Java
<LeetCode力扣练习>剑指 Offer 10- II. 青蛙跳台阶问题 Java 一.资源 题目: 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总 ...
最新文章
- SLAM之特征匹配(三)————RANSAC------LO-RANSAC Algorithm
- 当当创始人李国庆谈吴秀波事件:呼吁释放陈昱霖 应核查税收
- 万能门店小程序_关于传统门店开发微信小程序的优势
- linux twm,linux 命令缩写解析
- 【AI视野·今日NLP 自然语言处理论文速览 第一期】Fri, 4 Jun 2021
- linux grub 删除文件,删除grub的方法(转)
- 机器学习之KNN 算法
- java基础总结06-常用api类-包装类
- Eclipse Java注释模板设置详解以及版权声明
- Bentley.Hammer.XM.v08.09.400.34 1CD(水锤和瞬态分析软件)好用版\
- 帝国cms会员注册页跳过选择注册会员类型
- GridView样式设置
- 作业一:数据软件系统的介绍及spss的操作简介
- redis介绍命令性能数据及监控缓存穿透
- 计算机内部为什么采用二进制表示数据,计算机内部为什么使用二进制处理数据? - 问答库...
- 面试专题之:微服务场景
- 数据湖技术Hudi0.10master测试流程
- 【干货】python xlwt写入excel操作
- 创建在Linux上运行的 .NET Core 应用程序(matlab封装的dll文件)
- 1万条xml文件的写入,附加杂类知识
热门文章
- 冯·诺依曼计算机特点
- MATLAB保存当前窗口图像
- JavaSE——流程控制(接收输入Scanner、分支结构(if与switch)、循环结构(while、do-while与for))
- ❤️ 给你的Linux把把脉(内存、磁盘、CPU、网络)❤️
- 《底层逻辑》--思维导图
- 台湾计算机读研,台湾省计算机考研_会考教育名副其实
- AES算法重点详解和实现
- 为什么CAP不能同时满足的简单理解
- BigDecimal的异常记录:java.lang.ArithmeticException: Rounding necessary
- CoreAnimation编程指南(三)几何变换