美文网首页剑指offer- python实现
面试题20:表示数值的字符串

面试题20:表示数值的字符串

作者: 不会编程的程序猿甲 | 来源:发表于2020-03-04 14:30 被阅读0次

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

    思路一:
    利用python的强制folat转换来判断,可以转换则为数值,否则不是数值

    思路一代码实现:

    # -*- coding:utf-8 -*-
    class Solution:
        # s字符串
        def isNumeric(self, s):
            # write code here
            try:
                return float(s)
            except:
                return 0
                    
    

    思路二:考虑是否有e存在,如果有,e后面必须有数字,且必须是整数(正整数o或负整数),如果没有e存在,则判断它是不是普通的数字。详见思维导图:


    20 表示数值的字符串.png

    思路二代码实现:

    # -*- coding:utf-8 -*-
    class Solution:
        # s字符串
        #2.剑指offer解法
        def isNumeric(self, s):
            # write code here
            if len(s)<=0:
                return False
            s_list =[i.lower() for i in s]  #将字符串中的大写都转换成小写
            if 'e' in s_list:             #判断是否有e
                e_index = s_list.index('e')
                front = s_list[:e_index]
                behind = s_list[e_index+1:]
                if '.' in behind or len(behind)<1:
                    return False
                else:
                    return self.Is_Digit(front) and self.Is_Digit(behind)
            else:
                return self.Is_Digit(s_list)
        def Is_Digit(self,s):
            allow_char = ['0', '1', '2', '3', '4', '5', '6',
                            '7', '8', '9', '+', '-', '.'] #允许出现的字符
            count_dot = 0;
            for i in range(len(s)):
                if s[i] not in allow_char:
                    return False
                elif s[i] =='.':
                    count_dot+=1
                elif s[i] in '+-'and i != 0:
                    return False
            if(count_dot>1):
                return False
            else:
                return True
    

    提交结果:


    牛客网提交结果

    相关文章

      网友评论

        本文标题:面试题20:表示数值的字符串

        本文链接:https://www.haomeiwen.com/subject/jjnllhtx.html