关闭

剑指offer-表示数值的字符串

标签: java字符串
407人阅读 评论(0) 收藏 举报
分类:

题目描述

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

解析
对于java有多种方法,这里首先提供一般的方法:分类处理

在牛客网上还看到各种解法,虽然都是依靠java强大的函数库或者是java自己的一些特性,有些投机取巧的意味,但也反映了思路的灵活性。

1、一般方法

public class Solution {
    boolean isNumeric(char[] s) {
        if(s.length==0) return false;
        if((s.length==1)&&(s[0]<'0'||s[0]>'9')) return false;
        if(s[0]=='+'||s[0]=='-'){
            if(s.length==2&&(s[1]=='.')) return false;
        }else if((s[0]<'0'||s[0]>'9')&&s[0]!='.') return false;//首位既不是符号也不是数字还不是小数点,当然是false
        int i = 1;
        while((i<s.length)&&(s[i]>='0'&&s[i]<='9')) i++;
        if(i<s.length&&s[i]=='.'){
            i++;
            //if(i>=s.length) return false;
            while((i<s.length)&&(s[i]>='0'&&s[i]<='9')) i++;
        }
        if(i<s.length&&(s[i]=='e'||s[i]=='E')){
            i++;
            if((i<s.length)&&(s[i]=='+'||s[i]=='-')){
                i++;
                if(i<s.length) while((i<s.length)&&(s[i]>='0'&&s[i]<='9')) i++;
                else return false;
            }else if(i<s.length){
                while((i<s.length)&&(s[i]>='0'&&s[i]<='9')) i++;
            }else return false;
        }
        if(i<s.length) return false;            
        return true;        
    }
}

2、正则表达式

public class Solution {
    public boolean isNumeric(char[] str) {
        String string = String.valueOf(str);
        return string.matches("[\\+-]?[0-9]*(\\.[0-9]*)?([eE][\\+-]?[0-9]+)?");
    }
}

3、借助java的异常处理类

public class Solution {
    public boolean isNumeric(char[] str) {
        try {
            double re = Double.parseDouble(new String(str));
        } catch (NumberFormatException e) {
            return false;
        }
        return true;
    }
}
0
0
查看评论

【剑指offer】判断二叉树平衡

题目:输入一个二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。 剑指offer上给的第二种思路,用后序遍历真的是将递归发挥的淋漓尽致,先遍历节点的左右子树,左右子树都平衡才来判断该节点是否平衡,如果左右子树中有不平衡的,...
  • mmc_maodun
  • mmc_maodun
  • 2014-05-28 08:22
  • 3067

剑指offer-面试题54-表示数值的字符串

package case54_isNumeric; /** * 题目:表示数值的字符串。请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串“+100”,“5e2”,“-123”,“3.1416” * 以及“-1E-16”都表示数值。但是“12e”,“1a3.14”,“1....
  • VIP_WangSai
  • VIP_WangSai
  • 2017-05-02 12:21
  • 255

【剑指offer-解题系列(53)】表示数值的字符串

题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e&...
  • jbddygb
  • jbddygb
  • 2017-06-08 22:25
  • 112

剑指offer-面试题54:表示数值的字符串

题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、"5e2"、"-123"、“3.1416”及“-1E-16”都表示数值,但"12e“、”1a3.14"、“1.2.3”、“+-5...
  • moses1213
  • moses1213
  • 2016-04-26 19:51
  • 439

剑指Offer-字符串

替换空格题目描述请实现一个函数,将一个字符串中的空格替换成 “%20”。例如,当字符串为 We Are Happy. 则经过替换之后的字符串为 We%20Are%20Happy。 时间限制:1 秒 空间限制:32768K 代码/** * @author Think * @since 2016-1...
  • surp2011
  • surp2011
  • 2016-12-27 15:11
  • 235

剑指offer-字符串

1、常量字符串 为了节省内存,C++会把常量字符串放到单独一个内存区域。当有指针赋值给相同常量字符串时,他们会指向相同的内存地址。int main(){ char str1[] = "hello world"; char str2[] = "hello...
  • sinat_27612639
  • sinat_27612639
  • 2016-06-30 22:31
  • 152

剑指offer-53.表示数值的字符串

题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e&quo...
  • I_love_blog
  • I_love_blog
  • 2017-05-08 19:52
  • 336

剑指Offer-20:表示数值的字符串

请实现一个函数用来判断字符串是否表示数值
  • Koala_Tree
  • Koala_Tree
  • 2018-01-05 12:00
  • 45

剑指Offer--054-表示数值的字符串

链接 牛客OJ:表示数值的字符串 九度OJ:未收录 GitHub代码: 054-表示数值的字符串 CSDN题解:剑指Offer–054-表示数值的字符串 牛客OJ 九度OJ CSDN题解 GitHub代码 054-表示数值的字符串 未收录 剑...
  • gatieme
  • gatieme
  • 2016-06-01 21:38
  • 1348

剑指Offer_53_表示数值的字符串

题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。解题思路首先判断是否有符号(+或者-),如果...
  • ggmfengyangdi
  • ggmfengyangdi
  • 2016-08-27 09:38
  • 359
    个人资料
    • 访问:96446次
    • 积分:2387
    • 等级:
    • 排名:第18408名
    • 原创:143篇
    • 转载:27篇
    • 译文:0篇
    • 评论:1条
    最新评论