題目描述(字串)思路:(1)考慮字串**現的幾種字元(2)可以表示數值的條件請實現乙個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串"+100",「5e2」,"-123",「3.1416"和」-1e-16"都表示數值。 但是"12e",「1a3.14」,「1.2.3」,"±5"和"12e+4.3"都不是。
(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。採用二分法的思路,設定兩個指標分別指向陣列的第乙個元素和最後乙個元素。第乙個元素應該是大於或者等於最後乙個元素的,存在特例 找到陣列中間的元...