LeetCode每日一题 - 剑指 Offer 20. 表示数值的字符串

tech2022-08-14  130

题目:剑指 Offer 20. 表示数值的字符串

Description

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416”、"-1E-16"、“0123"都表示数值,但"12e”、“1a3.14”、“1.2.3”、"±5"及"12e+5.4"都不是。

Solution

划水划水 记录一下wa了12次的题!!! 这题建议是真的真的很无聊才去做!!!

AC Code

无参考价值

class Solution { public: bool isNumber(string str) { string s; int l=0,r=str.length()-1; for(int i=0;i<str.length();i++){ if(str[i]!=' '){ l=i;break; } } s=str.substr(l); for(int i=s.length()-1;i>=0;i--){ if(s[i]!=' '){ r=i;break; } } s=s.substr(0,r+1); for(int i=0;i<s.length();i++) { if(s[i]=='E') s[i]='e'; } int num=0; if(s.length()==1&&(s[0]<'0'||s[0]>'9')) return 0; if(count(s.begin(),s.end(),'.')>1) return 0; if(count(s.begin(),s.end(),'e')>1) return 0; if(count(s.begin(),s.end(),'+')>2) return 0; if(count(s.begin(),s.end(),'-')>2) return 0; if(s[0]!='.'&&s[0]!='+'&&s[0]!='-'&&(s[0]<'0'||s[0]>'9')) return 0; if((s[s.length()-1]<'0'||s[s.length()-1]>'9')&&s[s.length()-1]!='.') return 0; if(num==0&&(s[0] >= '0' && s[0]<='9')) num=1; int e=0; for(int i=1;i<s.length();i++){ if(num==0&&(s[i] >= '0' && s[i]<='9')) num=1; if ((s[i] < '0' || s[i]>'9') && s[i] != '.' && s[i] != 'e' && s[i] != 'E'&&s[i]!='+'&&s[i]!='-') return 0; else if(s[i]=='e'||s[i]=='E') { if(num==0) return 0; e=1; } else if(e==0&&(s[i]=='-'||s[i]=='+')) return 0; else if(e==1&&s[i]=='.') return 0; else if(i==s.length()-1&&s[i]=='.'&&num==0) return 0; } return 1; } };
最新回复(0)