字串處理的題目往往涉及複雜的流程以及條件情況,如果直接上手寫程式,一不小心就會寫出極其臃腫的**。
因此,為了有條理地分析每個輸入字元的處理方法,我們可以使用自動機這個概念。
我就是直接上手擼**,對題目沒有乙個整體的把握和設計,中途遇到某個沒有考慮到的情形就新增**去解決,結果導致之前解決好的問題出現錯誤,提交不能通過後又加添**,然後這樣又會影響之前已經解決的某個情形。。。最後的感覺就是毫無演算法的清晰感覺,**非常臃腫。
**如下:我使用雜湊表來儲存每個字元對應的數字,通過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 函式,使其能將字串轉換成整數。首先,該函式會根據需要丟棄無用的開頭空格字元,直到尋找到第乙個非空格的字元為止。當我們尋找到的第乙個非空字元為正或者負號時,則將該符號與之後面盡可能多的連續數字組合起來,作為該整數的正負號 假如第乙個非空字元是數字,則直接將其與之後連續的數字字...