zoukankan      html  css  js  c++  java
  • 牛客网 表示数值的字符串

    题目:

    请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。

    解题:

    public class Solution {
        private int index = 0;
        public boolean isNumeric(char[] str) {
            // input check
            if(str.length < 1)
                return false;
            // execute
            boolean result = scanInteger(str);
            if(index < str.length && str[index] == '.'){
                index++;
                // 下面这句表示三种情况:整数部分和小数部分都存在; 整数部分存在,小数部分不存在; 整数部分不存在,小数部分存在
                // 不允许出现正数和小数都不出现的情况
                // 务必留意: result必须在||右边, 不能放在左边. 因为如果放在左边,同时result又是true, 那么就不会执行||右边的语句了
                result = scanUnsignedInteger(str) || result;
            }
            if(index < str.length && (str[index] == 'e' || str[index] == 'E')){
                index++;
                result = result && scanInteger(str);
            }
            // 不仅要返回result, 还要确保已经判断完每个char
            return result && (index == str.length);
        }
    
        public boolean scanInteger(char[] str){
            if(index < str.length && (str[index] == '+' || str[index] == '-'))
                index++;
            return scanUnsignedInteger(str);
        }
        public boolean scanUnsignedInteger(char[]str){
            int start = index;
            while(index < str.length && str[index] >= '0' && str[index] <= '9'){
                index++;
            }
            // index比start大, 说明扫描的部分有数字, 返回ture
            // index等于start, 说明扫描的部分没有数字, 返回false
            return start < index;
        }
    }
  • 相关阅读:
    测试用例的设计
    测试经理的职责
    如果开发认为这不是bug,对QA来说应该怎么处理?
    我选择测试的过程
    API的知识点
    测试人员需要的技能
    时区转换的计算方式
    学习能力的必需
    制图工具
    JSON序列和反序列1
  • 原文地址:https://www.cnblogs.com/yanhowever/p/12237536.html
Copyright © 2011-2022 走看看