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实现

  • 相关阅读:
    生活的乐趣
    android加载webview白屏问题
    强极则辱
    向studio项目中复制集成其他代码,项目R文件丢失
    每一步都是最好的选择
    JQuery小插件,Selected插件1
    JSON进阶三JSON的几种调用形式
    JSON进阶四前后台交互之美
    .NET双样式分页控件
    JSON进阶五JS和WCF的交互
  • 原文地址:https://www.cnblogs.com/yongh/p/10067651.html
Copyright © 2011-2022 走看看