劍指offer面試題20 表示數值的字串

2021-10-05 05:15:26 字數 3583 閱讀 3306

1、分成三類:整數 小數,指數

2、找到公用的判斷邏輯比如空判斷,去空格判斷等等放在抽象類中

3、給三類定義成三個判斷類,

4、主方法在呼叫的時候,依次去使用三個判斷類去執行即可

此外還有狀態機的判斷方法,但是我的狀態圖不知道怎麼下手≥。<。

inte***ce

numbervalidate

// 抽象類中定義用來檢查一些公共的操作,是否為空,去掉首尾空格,去掉 +/- 每個具體的分類器去呼叫,

//每個分類器的具體邏輯使用dovalidate去實現

abstract

class

numbervalidatetemplate

implements

numbervalidate

s =checkandprocessheader

(s);

if(s.

length()

==0)return

dovalidate

(s);

}private

boolean

checkstringempty

(string s)

return

false;}

private string checkandprocessheader

(string value)

return value;

}protected

abstract

boolean

dovalidate

(string s);}

//實現 dovalidate 判斷是否是整數

class

integervalidate

extends

numbervalidatetemplate

}return

true;}

}//實現 dovalidate 判斷是否是科學計數法

class

sienceformatvalidate

extends

numbervalidatetemplate

if(s.

length()

==1) string first = s.

substring(0

, pos)

; string second = s.

substring

(pos+

1, s.

length()

);if(

validatepartbeforee

(first)

==false

||validatepartaftere

(second)

==false

)return

true;}

private

boolean

validatepartbeforee

(string first)if(

checkheadandendforspace

(first)

==false

) numbervalidate integervalidate =

newintegervalidate()

; numbervalidate floatvalidate =

newfloatvalidate()

;if(integervalidate.

validate

(first)

==false

&& floatvalidate.

validate

(first)

==false

)return

true;}

private

boolean

checkheadandendforspace

(string part)

return

true;}

private

boolean

validatepartaftere

(string second)if(

checkheadandendforspace

(second)

==false

) numbervalidate integervalidate =

newintegervalidate()

;if(integervalidate.

validate

(second)

==false

)return

true;}

}//實現 dovalidate 判斷是否是小數

class

floatvalidate

extends

numbervalidatetemplate

if(floatval.

length()

==1) numbervalidate nv =

newintegervalidate()

; string first = floatval.

substring(0

, pos)

; string second = floatval.

substring

(pos +

1, floatval.

length()

);if(

checkfirstpart

(first)

==true

&&checkfirstpart

(second)

==true

)return

false;}

private

boolean

checkfirstpart

(string first)

return

true;}

private

boolean

checkpart

(string part)

numbervalidate nv =

newintegervalidate()

;if(nv.

validate

(part)

==false

)return

true;}

}//定義乙個執行者,我們把之前實現的各個類加到乙個陣列裡,然後依次呼叫

public

class

numbervalidator

implements

numbervalidate

private

void

addvalidators()

@override

public

boolean

validate

(string s)

}return

false;}

public

boolean

isnumber

(string s)

}

劍指offer 面試題20

題目 從外向裡順時針列印矩陣 做題心得 該題本質上並未考查複雜的資料結構及演算法,而是考查了快速找規律的能力!要想作出此題,必須先有絕對清晰的思路,否則越寫越亂 因為涉及到很多的迴圈列印 自己當時的思路基本符合作者提供的思路 先考慮怎麼列印一圈 四個迴圈 再考慮如何結束列印 和作者的意圖不太一樣,自...

劍指Offer面試題20 表示數值的字串

請實現乙個函式用來判斷字串是否表示數值 包括整數和小數 例如,字串 100 5e2 123 3.1416 和 1e 16 都表示數值。但是 12e 1a3.14 1.2.3 5 和 12e 4.3 都不是。解題思路 關鍵點是 表示數值得字串遵循的模式a b e ec 或者.b e ec 其中a為數值...

劍指Offer 面試題20(表示數值的字串)

這裡是引用 題目描述 請實現乙個函式用來判斷字串是否表示數值 包括整數和小數 例如,字串 100 5e2 123 3.1416 及 1e 16 都表示數值,但 12e 1a3.14 1.2.3 5 及 12e 5.4 都不是。示例 include bool scanunsignedinteger c...