zoukankan      html  css  js  c++  java
  • 【LeetCode】65. Valid Number

    Difficulty: Hard

     More:【目录】LeetCode Java实现

    Description

    Validate if a given string can be interpreted as a decimal number.

    Some examples:
    "0" => true
    " 0.1 " => true
    "abc" => false
    "1 a" => false
    "2e10" => true
    " -90e3   " => true
    " 1e" => false
    "e3" => false
    " 6e-1" => true
    " 99e2.5 " => false
    "53.5e93" => true
    " --6 " => false
    "-+3" => false
    "95a54e53" => false

    Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one. However, here is a list of characters that can be in a valid decimal number:

    • Numbers 0-9
    • Exponent - "e" or "E"
    • Positive/negative sign - "+"/"-"
    • Decimal point - "."

    Of course, the context of these characters also matters in the input.

    Intuition

    Method1: A valid number is in the form of A.B e/E A (A: integer, B: unsigned integer), so it is helpful to break the problem down to several components that can be solved individually. Detailed solution refer to: 表示数值的字符串

     Method2: Use some flags(eSeen, pointSeen, isNum) while scan each character in the String. The solution is shown below.

    Solution

        public boolean isNumber(String s) {
            if(s==null || s.length()<=0)
                return false;
            s=s.trim();
            boolean isNum=false;
            boolean pointSeen=false;
            boolean eSeen=false;
            for(int i=0;i<s.length();i++){
                if(s.charAt(i)=='+'||s.charAt(i)=='-'){
                    if(i!=0 && s.charAt(i-1)!='e' && s.charAt(i-1)!='E')
                        return false;
                }else if(Character.isDigit(s.charAt(i))){
                        isNum=true;
                }else if(s.charAt(i)=='.'){
                    if(eSeen || pointSeen)
                        return false;
                    pointSeen=true;
                }else if(s.charAt(i)=='e' || s.charAt(i)=='E' ){
                    if(eSeen || !isNum)
                        return false;
                    eSeen=true;
                    isNum=false;
                }else
                    return false;
            }
            return isNum;
        }
    

      

    Complexity

    Time complexity : O(n)

    Space complexity :  O(1)

    What I've learned

    1. Ought to make the best of flags. Learn to use flags well.

     More:【目录】LeetCode Java实现

  • 相关阅读:
    C++继承基础总结
    C++如何设计只实例化一次的类?
    复试专业课知识记录(6)
    复试专业课知识记录(5)
    复试专业课知识记录(4)
    复试专业课知识记录(3)
    复试专业课知识记录(2)
    卡尔曼滤波算法学习记录
    复试专业课知识记录(1)
    PAT:1048. Find Coins (25)(哈希表法) AC
  • 原文地址:https://www.cnblogs.com/yongh/p/10067651.html
Copyright © 2011-2022 走看看