8 字串轉換整數(有限狀態機DFA)

2021-10-07 22:01:41 字數 1649 閱讀 6598

字串處理的題目往往涉及複雜的流程以及條件情況,如果直接上手寫程式,一不小心就會寫出極其臃腫的**。

因此,為了有條理地分析每個輸入字元的處理方法,我們可以使用自動機這個概念。

我就是直接上手擼**,對題目沒有乙個整體的把握和設計,中途遇到某個沒有考慮到的情形就新增**去解決,結果導致之前解決好的問題出現錯誤,提交不能通過後又加添**,然後這樣又會影響之前已經解決的某個情形。。。最後的感覺就是毫無演算法的清晰感覺,**非常臃腫。

**如下:我使用雜湊表來儲存每個字元對應的數字,通過value值也可以知道該鍵值是哪個字元。**整體使用if-else結構,整個架構很臃腫。

class solution 

if ( i>0 && (digits.get(chararray[i-1])

if ( digits.containskey(chararray[i]) )

//'-'出現在第乙個非空字元上

else if ( digits.get(chararray[i])==-3 && result==0 )

//'+'出現在第乙個非空字元上

else if ( digits.get(chararray[i])==-2 && result==0 )

//' '空格

else

if ( sign==-1)

if ( result>integer.max_value/10 || (result==integer.max_value/10 && digit>7)) return integer.max_value;

if ( result看了官方解法發現有用到有限狀態機,研一上半學期學了形式語言與自動機,然後恍然大悟。這也證明學過的東西不一定會用。

該狀態機有四種狀態,初始狀態為start終止狀態為end。當前狀態隨著輸入字元轉移成另一種狀態。縱向用0123表示四種狀態,橫向用0123表示四種輸入字元。因此使用一張4×4大小的二維陣列來表示這個狀態表。初始狀態為0表示start,然後需要根據輸入來狀態轉移,那麼就需要乙個將輸入字元轉換成0123這樣的表示。用getindex()來實現。

class solution8 ,//橫向為輸入字元,縱向為狀態,,

};private int state = 0;

int sign = 1;

int result = 0;

public static int getindex(char c)

if (c == '+'|| c== '-')

if (character.isdigit(c))

return 3; }

public int get(char c)

}else

}result = result*10 + ((int)c-48);

}if (state==2 && c=='-')

return result; }}

class solution

if (s8.result==integer.max_value||s8.result==integer.max_value)

return s8.sign*s8.result;

} }

8 字串轉換整數 python

請你來實現乙個 atoi 函式,使其能將字串轉換成整數。首先,該函式會根據需要丟棄無用的開頭空格字元,直到尋找到第乙個非空格的字元為止。當我們尋找到的第乙個非空字元為正或者負號時,則將該符號與之後面盡可能多的連續數字組合起來,作為該整數的正負號 假如第乙個非空字元是數字,則直接將其與之後連續的數字字...

8 字串轉換整數 atoi

題目描述 請你來實現乙個atoi函式,使其能將字串轉換成整數。首先,該函式會根據需要丟棄無用的開頭空格字元,直到尋找到第乙個非空格的字元為止。當我們尋找到的第乙個非空字元為正或者負號時,則將該符號與之後面盡可能多的連續數字組合起來,作為該整數的正負號 假如第乙個非空字元是數字,則直接將其與之後連續的...

8 字串轉換整數(atoi)

請你來實現乙個 atoi 函式,使其能將字串轉換成整數。首先,該函式會根據需要丟棄無用的開頭空格字元,直到尋找到第乙個非空格的字元為止。當我們尋找到的第乙個非空字元為正或者負號時,則將該符號與之後面盡可能多的連續數字組合起來,作為該整數的正負號 假如第乙個非空字元是數字,則直接將其與之後連續的數字字...