請實現乙個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串"+100","5e2","-123","3.1416"和"-1e-16"都表示數值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
這道題目基本不涉及演算法的知識,主要考察對多種情況考慮的全面性。
最開始拿到的時候大致看了看,感覺可能出現情況極其的多。理了理思路後發現要使**通用性強一點,其實可以總結為幾條規則。
當目前的字元為以下情況時:
小數點:
不可為第一位或者最後一位
不可出現在e/e後面
至多只可出現一次
+ / -
只可出現在第一位或者 e/e 後面
e / e
不可為第一位或者最後一位
至多只可出現一次
總結來說有乙個技巧,當出現了 e/e後,可以重新更新新視角意義上的數字第一位,因為其後面的字元可以定義為乙個新的數字,只不過不可再出現 e/e 或者 小數點。
# -*- coding:utf-8 -*-
class solution:
# s字串
def isnumeric(self, s):
num_end_pos = len(s) - 1
num_start_pos = 0
e_mark = false
dot_mark = false
for i in range(num_end_pos+1):
num = s[i]
if num in '+-':
if i > num_start_pos: return false
elif num.isdigit(): continue
elif num in '.':
if not num_start_pos < i < num_end_pos or e_mark or dot_mark: return false
else: dot_mark = true
elif num in 'ee':
if not num_start_pos < i < num_end_pos or e_mark: return false
else:
e_mark = true
num_start_pos = i + 1
else:
return false
return true
劍指offer刷題筆記
給定一顆二叉搜尋樹,請找出其中的第k大的結點。例如,5 3 7 2 4 6 8 中,按結點數值大小順序第三個結點的值為4。struct treenode class solution treenode kthnode treenode proot,int k 非遞迴實現 class solution...
劍指offer刷題
面試題6 從尾到頭列印鍊錶 struct listnode class solution reverse res.begin res.end return res 替換空格class solution int newnumstr numstr numspace 2 if newnumstr leng...
劍指offer刷題
原題鏈結 動態規劃 class solution dp for int i 1 i len1 i else if p j 1 else return dp len1 len2 原題鏈結 數學推導 找規律 class solution else if n 3 2 return ipow 3 numso...