题解 | #表示数值的字符串#

表示数值的字符串

http://www.nowcoder.com/practice/e69148f8528c4039ad89bb2546fd4ff8

没有什么特别的技巧,自己磨了挺久,写了个凑合能看的,结束在剑指offer的最后一题。。。

主题思路:(1)设置几个全局的标志变量; (2)当出现特殊符号时判断是否符合条件,剩余字符串部分递归检查数字部分



public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str string字符串 
     * @return bool布尔型
     */
    //'e'和'E'标志位
    int falgE = 0;
    //'.'标志位
    int flagX = 0;
    //数字标志位
    int flagZ = 0;
    public boolean isNumeric (String str) {
        //去除首尾空格
        String s = str.trim();
        int i = 0, n = s.length();
        if(n == 0)    return false;
        if(s.charAt(i) == '+' || s.charAt(i) == '-'){
            //出现'.'后面数字前不能有+-号,也不能只有+-
            if(flagX == 1 || i == n-1)    return false;
            i++;
        }
        //遍历字符串
        for(int j = i; j < n; j++){
            //出现'.',标记为小数
            if(s.charAt(j) == '.'){
                //重复出现小数或e后有小数则错误
                if(falgE == 1 || flagX == 1){
                    return false;
                }else{
                    flagX = 1;
                    if(flagZ == 1){
                        //小数点前有数字,后面可以有或者没有数字
                        return    j == n-1 || isNumeric(s.substring(j+1));
                    }else{
                        //小数点前无数字,后面必须有数字
                        return    j+1 < n && isNumeric(s.substring(j+1));
                    }
                }
            }
            //出现'e'和'E'
            else if(s.charAt(j) == 'e' || s.charAt(j) == 'E'){
                //前面没有出现整数或重复出现e则错误
                if(flagZ == 0 || falgE == 1){
                    return false;
                }else{
                    falgE = 1;
                    //恢复小数标志,整数部分允许出现+-号
                    flagX = 0;
                    //后面必须有数字
                    return j+1 < n && isNumeric(s.substring(j+1));
                }
            }
            //正常的数字字符
            else if(s.charAt(j) >= '0' && s.charAt(j) <= '9'){
                flagZ = 1;
                i++;
            }
            //其他字符则错误
            else{
                return false;
            }
        }
        return true;
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
今天 11:00
点赞 评论 收藏
分享
07-04 21:23
已编辑
东莞城市学院 后端
秋招和春招只收到几个中大厂的笔试,本人比较菜,感觉大厂的笔试太难,算法题不能全部做出来就没过了,但是CVTE和小天才的感觉不是很难,基本上都做出来了,笔试还是挂了。Boss上投了Java后端开发都没有回音,boss上有面试机会都是C#工控软件开发方向的,但是这个方向不太懂,资料又少,面试的表现有点差,现在还是想看看Java这边,面试的时候比较有把握点。想请教一下,这份简历还有什么问题,一直没什么机会,还有什么地方要修改的。
程序员小白条:学历太差,民办和公办,外包还得区分的,这个学历+这个简历,没的办法,除非你有人脉,太难了,这环境,何况你都毕业了,连一段实习都没,肯定没公司会挑选了,没竞争力,开发才招几个人,跟你竞争的可不是二本,三本的人哦,何况你在二本,三本里面也排名不高
投递小天才等公司7个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务