• Leetcode Valid Number


    题目

    思路

    1. WA 了十次

    2. 

    // e9 False
    // .1 true
    // 3. true
    // . false
    // 343e+34 true

    3. 分成了三个部分, 三部分之间有较弱的依赖关系, 还可以通过 bool 变量与返回值分开

    代码

    bool pa, pb, pc;
    int FurtherA(const char *s, int &st, int ed)  {
    	if(s[st] == '+' || s[st] == '-')
    		st ++;
    
    	if(st > ed) return -1;
    
    	if(s[st] == '.')  {
    		st ++;
    		return 1;
    	}  else  {
    		if(!(s[st] <= '9' && s[st] >= '0')) return -1;
    	}
    
    	
    	while(st <= ed)  {
    		if(s[st] >= '0' && s[st] <= '9')  {
    			st ++;
    			pa = true;
    			continue;
    		}
    		if(s[st] == '.')  {
    			st ++;
    			return 1;
    		}
    		if(s[st] == 'e')  {
    			st ++;
    			return 2;
    		}
    		return -1;
    	}
    
    	return 0;
    
    }
    
    int FurtherB(const char *s, int &st, int ed)  {
    	if(st > ed) return 0;
    	//if(!(s[st] <= '9' && s[st] >= '0')) return -1;
    
    	while(st <= ed)  {
    		if(s[st] >= '0' && s[st] <= '9')  {
    			st ++;
    			pb = true;
    			continue;
    		}
    
    		if(s[st] == 'e')  {
    			st ++;
    			return 2;
    		}
    		// else
    		return -1;
    	}
    		return 0;
    }
    
    int FurtherC(const char *s, int &st, int ed)  {
    	if(s[st] == '+' || s[st] == '-') 
    		st ++;
    	
    	if(st > ed) return -1;
    	if(!(s[st] <= '9' && s[st] >= '0')) return -1;
    	while(st <= ed)  {
    		if(s[st] >= '0' && s[st] <= '9') {
    			st ++;
    			pc = true;
    			continue;
    		}
    		return -1;
    	}
    
    	return 0;
    }
    
    
    class Solution {
    public:
        bool isNumber(const char *s) {
    		int len = strlen(s);
    
    		int i = 0, j = len-1;
    		// skip 
    		while(i < len && s[i] == ' ')  {
    			i ++;
    		}        
    		while(j >= i && s[j] == ' ')  {
    			j --;
    		}
    
    		if(i > j) return false;
    
    		if(i == j && s[i] == '.')
    			return false;
    
    		pa = pb = pc = false;
    
    		int res_a, res_b = 1, res_c = 1;
    
    		res_a = FurtherA(s, i, j);
    
    		//cout << res_a << endl;
    		if(res_a == 0 && pa)  {
    			return true;
    		}  else if  (res_a == -1)  {
    			return false;
    		}  else if  (res_a == 1)  {
    			res_b = FurtherB(s, i, j);
    		}
    
    		if(res_b == 0 && (pa || pb)) {
    			return true;
    		}  else if(res_b == -1)  {
    			return false;
    		}
    
    		if(res_a == 2 || res_b == 2)  {
    			res_c = FurtherC(s, i, j);
    		}
    
    		if(res_c == 0 && pc && (pa || pb ))  {
    			return true;
    		}
    
    		return false;
        }
    };
    

      

  • 相关阅读:
    Java8基础学习之Object类
    Java8基础之equals方法和==的区别
    Spring集成ElasticSearch
    ElasticSearch常用的查询过滤语句
    数据库查看SQL执行计划
    数据库优化总结
    ElasticSearch之集群原理
    curl命令操作ElasticSearch总结
    ElasticSearch相关概念总结
    ElasticSearch基础入门
  • 原文地址:https://www.cnblogs.com/zhouzhuo/p/3684339.html
Copyright © 2020-2023  润新知