zoukankan      html  css  js  c++  java
  • 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;
        }
    };
    

      

  • 相关阅读:
    UVa 1354 天平难题 (枚举二叉树)
    广西邀请赛总结
    UVa 12118 检查员的难题 (dfs判连通, 构造欧拉通路)
    UVA
    Uva 127 "Accordian" Patience (模拟)
    UVA 10539 Almost Prime Numbers( 素数因子)
    HDU 1272 小希的迷宫(并查集)
    HDU 1213 How Many Tables (并查集)
    POJ 2236 Wireless Network(并查集)
    HDU 1233 还是畅通工程 ( Kruskal或Prim)
  • 原文地址:https://www.cnblogs.com/zhouzhuo/p/3684339.html
Copyright © 2011-2022 走看看