zoukankan      html  css  js  c++  java
  • *Valid Number

    Validate if a given string is numeric.

    Some examples:
    "0" => true
    " 0.1 " => true
    "abc" => false
    "1 a" => false
    "2e10" => true

    Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.

    Update (2015-02-10):
    The signature of the C++ function had been updated. If you still see your function signature accepts a const char * argument, please click the reload button  to reset your code definition.

    解法一:

    /**
     * 本代码由九章算法编辑提供。没有版权欢迎转发。
     * - 九章算法致力于帮助更多中国人找到好的工作,教师团队均来自硅谷和国内的一线大公司在职工程师。
     * - 现有的面试培训课程包括:九章算法班,系统设计班,BAT国内班
     * - 更多详情请见官方网站:http://www.jiuzhang.com/
     */
    
    // Non-regex version
    
    public class Solution {
        public boolean isNumber(String s) {
            int len = s.length();
            int i = 0, e = len - 1;
            while (i <= e && Character.isWhitespace(s.charAt(i))) i++;
            if (i > len - 1) return false;
            while (e >= i && Character.isWhitespace(s.charAt(e))) e--;
            // skip leading +/-
            if (s.charAt(i) == '+' || s.charAt(i) == '-') i++;
            boolean num = false; // is a digit
            boolean dot = false; // is a '.'
            boolean exp = false; // is a 'e'
            while (i <= e) {
                char c = s.charAt(i);
                if (Character.isDigit(c)) {
                    num = true;
                }
                else if (c == '.') {
                    if(exp || dot) return false;
                    dot = true;
                }
                else if (c == 'e') {
                    if(exp || num == false) return false;
                    exp = true;
                    num = false;
                }
                else if (c == '+' || c == '-') {
                    if (s.charAt(i - 1) != 'e') return false;
                }
                else {
                    return false;
                }
                i++;
            }
            return num;
        }
    }

    解法二:

    CleanCode Version: better logic

    public class Solution {
        public boolean isNumber(String s) 
        {
            int i=0; 
            int n=s.length();
            while(i<n&&Character.isWhitespace(s.charAt(i)))i++;
            if(i<n&&(s.charAt(i)=='+'||s.charAt(i)=='-'))i++;
            boolean isNumeric = false;
            while(i<n&&Character.isDigit(s.charAt(i)))
            {
                i++;
                isNumeric = true;
            }
            if(i<n&&s.charAt(i)=='.')
            {
                i++;
                while(i<n&&Character.isDigit(s.charAt(i)))
                {
                    i++;
                    isNumeric =  true;
                }
            }
            if(isNumeric&&i<n&&s.charAt(i)=='e')
            {
                i++;
                isNumeric = false;
                if(i<n&&(s.charAt(i)=='+'||s.charAt(i)=='-'))i++;
                while(i<n&&Character.isDigit(s.charAt(i)))
                {
                    i++;
                    isNumeric =  true;
                }
            }
            while(i<n&&Character.isWhitespace(s.charAt(i)))i++;
            return i==n&&isNumeric;
        }
    }
  • 相关阅读:
    poj 1226
    在Excel中创建和使用ServerDocument
    Linux进程管理—信号、定时器
    《linux程序设计》--读书笔记--第十四章信号量、共享内存和消息队列
    POJ 1054 The Troublesome Frog
    boost库在工作(37)网络UDP服务端之七
    指纹增强程序Hong_enhancement
    读书笔记——Windows核心编程(15)在应用程序中使用虚拟内存
    蓝牙技术谈之调频技术(一)
    android使用全局变量的两种方法
  • 原文地址:https://www.cnblogs.com/hygeia/p/5115387.html
Copyright © 2011-2022 走看看