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;
        }
    };
    

      

  • 相关阅读:
    mac登录界面的背景壁纸图片位置
    【转载】MAC系统修改帐号短名和个人文件夹名称
    ios 6.x系统UITextView 设置为密码输入无效的问题
    一个简单的果冻弹动动画
    ios中的自动释放池
    ios 静态库联合调试
    【转】IOS制作静态库
    objective-c中为什么不能实现多重继承及如何变通实现
    回调中释放自己会不会导致崩溃?
    【转载】Objective-C runtime 消息机制
  • 原文地址:https://www.cnblogs.com/zhouzhuo/p/3684339.html
Copyright © 2011-2022 走看看