我太难了,俩小时。。。。。。
class Solution(object): def isNumber(self, s): """ :type s: str :rtype: bool """ s=s.strip() for i in range(len(s)): if s[i] not in 'e0123456789+-.': return False if len(s)<1: return False if len(s)==1: if s[0] not in '0123456789': return False if s[0] in 'e' or s[-1] in 'e+-': return False if s.count('e')>1: return False if s.count('e')==1: if s.count('.')>1: return False elif s.count('.')==1: #print('gygufyufu') if s[0]=='.' and s[1]=='e': return False if s.index('e')==s.index('.')-1: return False if s.index('.')>s.index('e'): return False if s.index('.')<s.index('e'): if s[s.index('.')+1] in '+-': return False if s[-1]!='.': return True else: return False if s.count('+')+s.count('-')>2: return False elif s.count('+')+s.count('-')==2: if s[0] in '+-' and s[s.index('e')+1] in '+-': return True else: return False elif s.count('+')+s.count('-')==1: if s[0] in '+-' or s[s.index('e')+1] in '+-': return True else: return False else: if s.count('+')+s.count('-')>2: return False elif s.count('+')+s.count('-')==2: if s[0] in '+-' and s[s.index('e')+1] in '+-': return True else: return False elif s.count('+')+s.count('-')==1: if s[0] in '+-' : if s[1]=='e': return False else: return True elif s[s.index('e')+1] in '+-' and len(s)>s.index('e')+2: return True else: return False else: if s.count('.')>1: return False elif s.count('.')==1: if s.count('+')+s.count('-')>1: return False elif s.count('+')+s.count('-')==1: if s[0] in '+-' : if len(s)==2: if s[1]=='.': return False else: return True elif len(s)>2: if s[1]=='.' and s[2] not in '0123456789': return False else: return True else: return True else: return False if s[s.index('.')-1] in '+-': return False else: if s.count('+')+s.count('-')>1: return False elif s.count('+')+s.count('-')==1: if s[0] in '+-': return True else: return False return True
执行用时 :28 ms, 在所有 Python 提交中击败了70.92%的用户
内存消耗 :11.7 MB, 在所有 Python 提交中击败了24.00%的用户
执行用时为 12 ms 的范例 class Solution(object): def isNumber(self, s): """ :type s: str :rtype: bool """ if not s: return False s = s.strip() sci = s.split('e') if len(sci) > 2: return False if len(sci) == 1: return False if not sci[0] else self.is_num(s) signs = ['-', '+'] sci[1] = sci[1] if not sci[1] or sci[1][0] not in signs else sci[1][1:] return self.is_num(sci[0]) and self.is_int(sci[1]) def is_num(self, s): if not s: return False signs = ['-', '+'] parts = s.split('.') if len(parts) > 2: return False parts[0] = parts[0] if not parts[0] or parts[0][0] not in signs else parts[0][1:] if len(parts) == 1: return self.is_int(parts[0]) if not parts[0] and self.is_int(parts[1]): return True if not parts[1] and self.is_int(parts[0]): return True return self.is_int(parts[0]) and self.is_int(parts[1]) def is_int(self, s): if not s: return False for i in range(0, len(s)): if not s[i].isdigit(): return False return True
没仔细看。。。
——2019.10.11
自己还是不会做,看了题解,学到了,简单清晰
public boolean isNumber(String s) {//可带有的字母是e,但是不能位于首位和末尾 if(s.length() == 0){ return false; } boolean num_seen = false; boolean has_e = false; //是否有e出现,是否合法 boolean has_dot = false; //是否有小数点出现,是否合法 s = s.trim(); for(int i = 0;i<s.length();i++){ if(s.charAt(i) <= '9' && s.charAt(i) >= '0'){ num_seen = true; }else if(s.charAt(i) == '.'){ if(has_dot || has_e){ return false; } has_dot = true; }else if(s.charAt(i) == 'e' || s.charAt(i) == 'E'){ if(has_e || !num_seen){ return false; } has_e = true; num_seen = false; }else if(s.charAt(i) == '+' || s.charAt(i) == '-'){ if(i != 0 && s.charAt(i-1) != 'e' && s.charAt(i-1) != 'E'){ return false; } }else{ return false; } } return num_seen; }
* 1.判断是否属于数字的0-9区间
* 2.遇到点的时候,判断前面是否有点或者E,都需要return false
* 3.遇到E的时候,判断前面数字是否合理,是否有E,并把num_seen置为false,防止E后无数字
* 4.遇到+-的时候,判断是否是第一个,如果不是,判断是否在E后面,都不满足return false
* 5.其他情况都是false
——2020.7.7