leetcode 學習記錄(8 字串轉換中整數)

2021-10-08 13:29:26 字數 1528 閱讀 3169

題目要求:

請你來實現乙個 atoi 函式,使其能將字串轉換成整數。

首先,該函式會根據需要丟棄無用的開頭空格字元,直到尋找到第乙個非空格的字元為止。接下來的轉化規則如下:

如果第乙個非空字元為正或者負號時,則將該符號與之後面盡可能多的連續數字字元組合起來,形成乙個有符號整數。

假如第乙個非空字元是數字,則直接將其與之後連續的數字字元組合起來,形成乙個整數。

該字串在有效的整數部分之後也可能會存在多餘的字元,那麼這些字元可以被忽略,它們對函式不應該造成影響。

注意:假如該字串中的第乙個非空格字元不是乙個有效整數字元、字串為空或字串僅包含空白字元時,則你的函式不需要進行轉換,即無法進行有效轉換。

在任何情況下,若函式不能進行有效的轉換時,請返回 0 。

心得:一開始做題時,比較沒有頭緒。首先應該先讀清題意。在第乙個非空格字元出現時就應該進行判斷。

讀取到空格-> 繼續讀取下乙個

讀取到+/-   -> 繼續讀取下乙個。下乙個還應該是數字

讀取到數字 ->開始記錄,準備下乙個讀取

第乙個字元不合以上  ->輸出結束

自己寫的**:

int myatoi(char *str) 		

else return 0;

}//for

if(flagtest==1) res=-res;

if(res>max) return max;

else if(res這段**中,max和min用來標記int的最大值和最小值,用於後續的判斷。輸入字串後進行判斷,如果為空格就繼續下乙個,如果為+、-或者數字,並且flag為0(即表示還未開始識別數字,因為字串裡面可能有多個分隔開的數字組。這段**能正確識別只有數字、只有字母、空格開頭的數字等情況,但數字混合字母識別錯誤,此外還有其他沒能立刻考慮到的情況。

將**轉化為dfa,如下圖:

其官方c++實現如下:

class automaton },

},},}};

int get_col(char c)

public:

int sign = 1;

long long ans = 0;

void get(char c)

else if (state == "signed")

sign = c == '+' ? 1 : -1;

}};class solution

};

在官方題解中,先用乙個unordered map,例項化乙個二維向量,用於儲存狀態轉移表。而get_col函式用於判斷下乙個字元的型別。

錄入字元時,get函式判斷state和get_col對應的table的值,計算並將結果存入ans,後面含三目運算子的語句用於判斷結果是否超出int。sign用於判斷正負。

leetcode 8 字串轉為整數。

實現atoi,將字串轉為整數。在找到第乙個非空字元之前,需要移除掉字串中的空格字元。如果第乙個非空字元是正號或負號,選取該符號,並將其與後面盡可能多的連續的數字組合起來,這部分字元即為整數的值。如果第乙個非空字元是數字,則直接將其與之後連續的數字字元組合起來,形成整數。字串可以在形成整數的字元後面包...

LeetCode 8 字串轉整數

題目描述 實現atoi,將字串轉為整數。該函式首先根據需要丟棄任意多的空格字元,直到找到第乙個非空格字元為止。如果第乙個非空字元是正號或負號,選取該符號,並將其與後面盡可能多的連續的數字組合起來,這部分字元即為整數的值。如果第乙個非空字元是數字,則直接將其與之後連續的數字字元組合起來,形成整數。字串...

leetcode8 字串轉整數

實現 atoi,將字串轉為整數。該函式首先根據需要丟棄任意多的空格字元,直到找到第乙個非空格字元為止。如果第乙個非空字元是正號或負號,選取該符號,並將其與後面盡可能多的連續的數字組合起來,這部分字元即為整數的值。如果第乙個非空字元是數字,則直接將其與之後連續的數字字元組合起來,形成整數。字串可以在形...