劍指offer刷題筆記 表示數值的字串

2021-10-05 07:12:42 字數 1227 閱讀 7870

請實現乙個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串"+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...