剑指 Offer 20. 表示数值的字符串(中等)
2021/4/24 10:26:41
本文主要是介绍剑指 Offer 20. 表示数值的字符串(中等),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
思路:
就是各自if/else if语句判断各个情况
代码:
class Solution { public boolean isNumber(String s) { if(s==null||s.length()==0){ return false; } //标记是否遇到数位、小数点、e或E boolean isNum=false,isDot=false,ise_or_E=false; //把s变为字符数组,trim()表示删除空格 char[] str=s.trim().toCharArray(); for(int i=0;i<str.length;i++){ if(str[i]>='0'&&str[i]<='9'){ isNum=true; } else if(str[i]=='.'){ //小数点之前可以没有整数 //但是不能出现重复的小数点 //小数点之前也不能有e/E if(isDot||ise_or_E){ return false; } isDot=true; } else if(str[i]=='e'||str[i]=='E'){ //e或E前面必须有整数,且前面不能出现重复的e/E if(!isNum||ise_or_E){ return false; } //标记e/E已遇到 ise_or_E=true; //重置整数,因为e/E之后也要有整数 isNum=false; } else if(str[i]=='-'||str[i]=='+'){ //正负号只能出现在第一个位置、e或E的后面 if(i!=0&&str[i-1]!='e'&&str[i-1]!='E'){ return false; } } else{ //其他的情况都是不合法字符 return false; } } return isNum; } }
分解:
1)当前字符是整数(str[i]>='0'&&str[i]<='9')
就置isNum=true,表示已遇到整数
2)当前字符是小数点'.'
小数点之前不能出现小数点,也不能出现e/E。如果出现就直接返回false
并且置小数点已经遇到过isDot=true
3)当前字符是e/E
e/E之前必须有整数,不能出现重复的e/E。如果出现就直接返回false
并且置e/E已经遇到ise_or_E=true,重置整数没有遇到isNum=false,因为e/E之后也要有整数
4)当前字符是正负号+/-
正负号只能出现在第一个位置或者是e/E的后面。如果都不是则返回false
5)其他的情况都是不合法字符,直接返回false
6)如果循环结束之后仍然没有返回,说明一整个都是整数,返回isNum
复杂度分析:
时间复杂度:O(N) 所有字符都要遍历一次
空间复杂度:O(N) 利用了一个字符数组
这篇关于剑指 Offer 20. 表示数值的字符串(中等)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-21《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》简介
- 2024-12-21后台管理系统开发教程:新手入门全指南
- 2024-12-21后台开发教程:新手入门及实战指南
- 2024-12-21后台综合解决方案教程:新手入门指南
- 2024-12-21接口模块封装教程:新手必备指南
- 2024-12-21请求动作封装教程:新手必看指南
- 2024-12-21RBAC的权限教程:从入门到实践
- 2024-12-21登录鉴权实战:新手入门教程
- 2024-12-21动态权限实战入门指南
- 2024-12-21功能权限实战:新手入门指南