劍指offer08 表示數值的字串

2021-10-05 18:37:27 字數 2388 閱讀 2677

題目描述(字串)

請實現乙個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串"+100",「5e2」,"-123",「3.1416"和」-1e-16"都表示數值。 但是"12e",「1a3.14」,「1.2.3」,"±5"和"12e+4.3"都不是。

思路:(1)考慮字串**現的幾種字元(2)可以表示數值的條件

(1)只可以出現數字、+ - 、e e、小數點、+ - 其他字元不合法

(2)+ - 只能在數字最開始或者e e後面兩個位置出現,在兩個位置都最多出現一次

小數點只能出現一次,出現在數字之間或者數字末尾

e e 只能出現一次 ,出現時前面必須有數字,後面不能有小數

整理成條件:

(1)出現的字元必須合法

(2)小數點和e出現次數不能大於1,+不能大於2

(3)e出現時:考慮小數點和+

如果有小數點,小數點必須在e後面

如果有乙個+,+必須在e後面

如果有兩個+,乙個+在e後面(注意這裡的索引因為有兩個+,所以這裡的索引要重新 使用乙個陣列),另乙個+在開頭

(4)e不出現時,小數點出現在**都無所謂了不考慮

如果有乙個+,必須在開頭

如果+數目》1,不合法

**如下:

# -*- coding:utf-8 -*-

class

solution

:# s字串

defisnumeric

(self, s)

:# write code here

num1,num2,num3 =0,

0,0for i in

range

(len

(s))

:if s[i]

=='e'

:# e和e一樣處理

s = s[

:i]+

'e'+ s[i +1:

]if s[i]

=='-'

:# -和+一樣處理

s = s[

:i]+

'+'+ s[i +1:

]# 記錄+ e . 出現次數

if s[i]

=='+'

: num1 +=

1elif s[i]

=='.'

: num2 +=

1elif s[i]

=='e'

: num3 +=

1elif

not(

(s[i]

>=

'0')

and(s[i]

<=

'9')):

#不是字元也不是數字 不合法

return

false

ifnot

((s[-1

]>=

'0')

and(s[-1

]<=

'9')):

# 最後一位必須是數字

return

false

if(num2>1)

or(num3>1)

or(num2>2)

:#兩個小數點 兩個e 三個+

return

false

if(num3 ==0)

:# 沒有e 只看+號出現位置 必須為第一位

if(num1>1)

:return

false

elif

(num1 ==1)

:if(s[0]!=

'+')

:return

false

elif

(num3 ==1)

:#有e

if(num2==1)

and(s.index(

'.')

> s.index(

'e')):

#有小數點時

return

false

elif

(num1==1)

:if(s.index(

'+')-1

!=s.index(

'e')):

return

false

elif

(num1==2)

: t = s[1:

]ifnot(

(t.index(

'+')-1

== t.index(

'e')

)and

(s[0]==

'+')):

return

false

return

true

劍指offer 08 跳台階

乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法 先後次序不同算不同的結果 於本題,前提只有 一次 1階或者2階的跳法。a.如果兩種跳法,1階或者2階,那麼假定第一次跳的是一階,那麼剩下的是n 1個台階,跳法是f n 1 b.假定第一次跳的是2階,那麼剩下的是...

劍指offer 08 跳台階

題目描述 乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法 先後次序不同算不同的結果 時間限制 c c 3秒,其他語言6秒 空間限制 c c 64m,其他語言128m 題目示例 示例1 輸入 1 返回值 1 示例2 輸入 4 返回值 5解法分析我記得這好像是一...

劍指Offer08 陣列旋轉問題

把乙個陣列最開始的若干個元素搬到陣列末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出陣列最小的元素。例如陣列為的乙個旋轉,該陣列的最小值為1。採用二分法的思路,設定兩個指標分別指向陣列的第乙個元素和最後乙個元素。第乙個元素應該是大於或者等於最後乙個元素的,存在特例 找到陣列中間的元...