题目描述

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

思路

根据题目给出的一些规则,可以表示成数值的字符串类型有:int整型,float浮点型,指数型(包括e和E),当然,前面三种都可以带上正负号;

不能表示成数值的字符串类型有:指数型错误(没有指数或者指数是小数,或者指数变成了a),float浮点型错误,第一个正负号后又带了正负号

于是,正负号类型的错误可以用if..else去判断;而在判定为没有正负号的错误下,再判断是否可以表达为数值型,就可以用float函数,再加上try..except

解答

class Solution:
# s字符串
def isNumeric(self, s):
# write code here
if s[0]=="+" or s[0]=="-":
if s[1]!="+" and s[1]!="-":
try:
if float(s[1:]):
return True
except:
return False
else:
return False
else:
try:
if float(s):
return True
except:
return False

也可以很准确地去判断:

class Solution:
# s字符串
def isNumeric(self, s):
# write code here
if s is None or len(s) == 0:
return False # 是否有e
hasE = False
# 是否有小数
isDecimal = False
# 是否有+-符号
hasSign = False for i in range(len(s)):
# 如果有e,只能有一个e且不能是最后一个
if s[i] == "e" or s[i] == "E":
if hasE or i == len(s) - 1:
return False
hasE = True
# 小数点不能重复出现或和e共线
elif s[i] == ".":
if hasE or isDecimal:
return False
isDecimal = True
elif s[i] == "-" or s[i] == "+":
# 重复出现符号时,必须跟在e后面
if hasSign and s[i - 1] != "e" and s[i - 1] != "E":
return False
# 重复出现符号时,必须跟在e后面
if not hasSign and i > 0 and s[i - 1] != "e" and s[i - 1] != "E":
return False
hasSign = True
elif s[i] < "" or s[i] > "":
return False
return True

剑指offer——python【第53题】表示数值的字符串的更多相关文章

  1. 剑指offer——面试题20:表示数值的字符串

    #include"iostream" using namespace std; bool IsInt(const char **str); bool IsUnsignInt(con ...

  2. 【剑指offer】面试题 20. 表示数值的字符串

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

  3. 《剑指offer》面试题20. 表示数值的字符串

    问题描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100"."5e2"."-123"."3.1 ...

  4. 剑指offer——python【第54题】字符流中第一个不重复的字符

    题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出 ...

  5. 《剑指offer》面试题11: 数值的整数次方

    面试题11: 数值的整数次方 剑指offer面试题11,题目如下 实现函数double power(double base,int exponent),求base的exponent次方, 不得使用库 ...

  6. 【剑指Offer】俯视50题之21 - 30题

    面试题21包括min函数的栈  面试题22栈的压入.弹出序列  面试题23从上往下打印二叉树  面试题24二叉搜索树的后序遍历序列  面试题25二叉树中和为某一值的路径  面试题26复杂链表的复制  ...

  7. 剑指offer——python【第28题】数组 中出现次数超过一半的数字

    题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

  8. 剑指offer——python【第60题】把二叉树打印成多行

    题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行.#类似于二维列表[[1,2],[4,5]] 解题思路 其实这倒题和其他类似的题有所区别,这里是分层打印,把每层的节点值放在同一 ...

  9. 剑指offer——python【第38题】二叉树的深度

    题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 解题思路 想了很久..首先本渣渣就不太理解递归在python中的实现 ...

随机推荐

  1. Java高并发和多线程系列 - 1. 线程基本概念

    1. 什么是线程? 线程和进程的区别 在了解线程的概念前,我们应该先知道什么是进程? 进程是操作系统的基本概念之一, 它是正在执行的程序实例. * 下面的一些进程的基本概念你可以了解下 ------- ...

  2. openssl RSA密钥格式PKCS1和PKCS8相互转换

    RSA私钥格式PKCS1和PKCS8相互转换 RSA公钥格式PKCS1和PKCS8相互转换 以下转换基于openssl命令的操作: 1. openssl 生成pkcs1格式的私钥,密钥长度1024位, ...

  3. BABLE 原理

    1.babel转换原理 2.主要过程 (1)babylon进行解析得到AST (2)babel-traverse插件对AST树进行遍历转译得到新的AST树 (3)babel-generator将AST ...

  4. 阿里云服务器CentOS7 vsftp安装、设置及后台端口的设置

    查看是否安装vsftp,我这个是已经安装的. [root@localhost vsftpd]# rpm -qa |grep vsftpd vsftpd-3.0.2-11.el7_2.x86_64 如果 ...

  5. 阿里云物联网平台体验(NetGadgeteer+C#篇)

    目前对接阿里云物联网平台有多种软件和硬件,可以有多种不同语言来实现对接,比如c/c++,Java,JS,Python,C#等等,不过C#版本只有PC对接云平台的代码,嵌入式的目前还没有看到,所以本篇文 ...

  6. android mat 转 bitmap

    Bitmap bmp = null; Mat tmp = new Mat (height, width, CvType.CV_8U, new Scalar(4)); try { //Imgproc.c ...

  7. iOS Message from debugger: Terminated due to memory issue ~解决方法

    一.概念: /** 1.内存管理概念 2.查看其他技术分享结论 3.产生崩溃原因 4.解决方法以及思路 CSND: https://blog.csdn.net/shihuboke/article/de ...

  8. vivado和modelsim联合调试仿真

    vivado和modelsim联合调试仿真 0赞 发表于 2017/5/10 19:10:59 阅读(881) 评论(0) 使用vivado和modelsim联合调试仿真时,在破解完modelsim后 ...

  9. FFmpeg libavutil主要功能概述

    [时间:2017-08] [状态:Open] [关键词:ffmpeg,avutil,avrational,avlog,avbuffer,avoptoin] 0 引言 FFmpeg使用很久了,一直没有认 ...

  10. Canvas入门到高级详解(上)

    神奇的 canvas--AICODER 全栈培训 IT 培训专家 一.canvas 简介 1.1 什么是 canvas?(了解) 是 HTML5 提供的一种新标签 <canvas>< ...