上面我们已经从整体与局部系统的分析了正确的组合方式,接下来我们就需要来开始思考如何实现算法。
从上面的分析我们知道了,如果是空串直接返回false,否则我们先把串的前后空格先都删除干净,然后第一个字符必然是:+,-,小数点,数字,如果是其它直接返回false.否则我们要分情况来讨论:
接下来我们来进行代码实现:
public class Solution {
public boolean isNumber(String s) {
//剔除空格
s = s.trim();
char[] chars = s.toCharArray();
int p = 0;
if(chars.length==0){
return false;
}
if(!isNegative(chars[p])&&!isPoint(chars[p])&&!isPositive(chars[p])&&!isNumber(chars[p])){
return false;
}else{
//绿色区域
if(isPositive(chars[p])||isNegative(chars[p])){
p++;
if(p==chars.length){
return false;
}
}
//蓝色区域
if(!isNumber(chars[p])&&!isPoint(chars[p])){
return false;
}else{
if(isPoint(chars[p])){
p++;
if(p==chars.length||!isNumber(chars[p])){
return false;
}else{
p++;
while(p<chars.length&&isNumber(chars[p])){
p++;
}
if(p==chars.length){
return true;
}
}
}else{
p++;
while(p<chars.length&&isNumber(chars[p])){
p++;
}
if(p==chars.length){
return true;
}else{
char c = chars[p];
if(isPoint(c)){
p++;
while(p<chars.length&&isNumber(chars[p])){
p++;
}
if(p==chars.length){
return true;
}
}
}
}
}
//红色区域
if(!isE(chars[p])){
return false;
}else{
p++;
if(p==chars.length){
return false;
}else{
if(isPositive(chars[p])||isNegative(chars[p])){
p++;
}
if(p==chars.length){
return false;
}
while(p<chars.length&&isNumber(chars[p])){
p++;
}
if(p==chars.length){
return true;
}else{
return false;
}
}
}
}
}
/**
* 判断是否是正号
*/
boolean isPositive(char c){
if(c=='+'){
return true;
}else{
return false;
}
}
/**
* 判断是否是-号
*/
boolean isNegative(char c){
if(c=='-'){
return true;
}else{
return false;
}
}
/**
* 判断是否是小数点
*/
boolean isPoint(char c){
if(c=='.'){
return true;
}else{
return false;
}
}
/**
* 判断是否是数字
*/
boolean isNumber(char c){
if(c>='0'&&c<='9'){
return true;
}else{
return false;
}
}
/**
* 判断是否是字符e
*/
boolean isE(char c){
if(c=='e'){
return true;
}else{
return false;
}
}
}