zoukankan      html  css  js  c++  java
  • [leetcode]Valid Number

    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.

    算法思路:

    排除法:遇到所有非法情况则返回false,扫描完之后返回true

    非法情况:

    符号:+、-最多只能出现两次,而且第二次必须出现在e/E后面。而且第一个+/-号之前必须没有数字,第二个比如紧接在e后面,而且后面必须有数字;

    e:最多只能出现一次。而且前后必须有数字;

    . : 最多只能出现一次,而且不能出现在e后面,.如果在字符串最后一位时,前面必须要有数字;

    【提交出错后补充】第一次提交的时候,“e”报错,边界情况没有考虑真是不应该

    总之这种题,不难,但是繁琐:

    给出我出错的case,希望大家借鉴:(好多啊,囧)

    005047e+6 true

    3. true

    .1 true

    -. false

    6+1 false

    . 1 false

    0e false

    代码如下:

     1 public class Solution {
     2     public boolean isNumber(String s) {
     3         if(s == null || s.trim().length() == 0) return false;
     4         s = s.trim();
     5         char[] charArray = {'0','1','2','3','4','5','6','7','8','9','.','e','E','+','-'};
     6         Set<Character> set = new HashSet<Character>();
     7         for(char c : charArray){
     8             set.add(c);
     9         }
    10         boolean hasE = false, hasPoint = false, hasNum = false;
    11         int operaterCount = 0;
    12         for(int i = 0; i < s.length(); i++){
    13             if(!set.contains(s.charAt(i))) return false;
    14             if(s.charAt(i) <= '9' && s.charAt(i) >= '0') hasNum = true;
    15             if(s.charAt(i) == 'E' || s.charAt(i) == 'e'){
    16                 if(i == 0 || i == s.length() - 1) return false;
    17                 if(!hasE && hasNum) hasE = true;
    18                 else return false;
    19             }
    20             if(s.charAt(i) == '.'){
    21                 if(i == 0 && 1 == s.length()) return false;
    22                 if(i == s.length() - 1 && !hasNum) return false;
    23                 if(!hasPoint && !hasE) hasPoint = true;
    24                 else return false;
    25             }
    26             if(s.charAt(i) == '-' || s.charAt(i) == '+'){
    27                 if(i == s.length() - 1 || (i != 0 && s.charAt(i - 1) != 'e' && s.charAt(i - 1) != 'E')) return false;
    28                 if(operaterCount == 2) return false;
    29                 if(operaterCount == 1 && !hasE && !hasNum) return false;
    30                 operaterCount++;
    31             }
    32         }
    33         return true;
    34     }
    35 }
  • 相关阅读:
    linux vsftpd
    java运用FFMPEG视频转码技术
    使用ffmpeg实现转码样例(代码实现)
    最简单的基于FFMPEG的转码程序
    关于Android Studio升级到2.0后和Gradle插件不兼容的问题
    Android设计模式之命令模式、策略模式、模板方法模式
    Android设计模式源码解析之桥接模式
    Android 项目利用 Android Studio 和 Gradle 打包多版本APK
    RTMP协议详解(转)
    Android 如何使用juv-rtmp-client.jar向Red5服务器发布实时视频数据
  • 原文地址:https://www.cnblogs.com/huntfor/p/3915882.html
Copyright © 2011-2022 走看看