一、題目
實現atoi
,將字串轉為整數。
在找到第乙個非空字元之前,需要移除掉字串中的空格字元。如果第乙個非空字元是正號或負號,選取該符號,並將其與後面盡可能多的連續的數字組合起來,這部分字元即為整數的值。如果第乙個非空字元是數字,則直接將其與之後連續的數字字元組合起來,形成整數。
字串可以在形成整數的字元後面包括多餘的字元,這些字元可以被忽略,它們對於函式沒有影響。
當字串中的第乙個非空字串行不是個有效的整數;或字串為空;或字串僅包含空白字元時,則不進行轉換。
若函式不能執行有效的轉換,返回 0。
說明:
假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−231, 231 − 1]。如果數值超過可表示的範圍,則返回 int_max (231 − 1) 或 int_min (−231) 。
二、思路
這個題目是乙個比較簡單的字串處理題目,將處理好的字串轉化為整數,只是需要考慮的情況比較多。
要考慮的情況包括下面這些:
1、字串為空
2、字串開頭有空格
3、過濾掉字串開頭空格後字串變為空串
4、字串是以數字開頭、正負號開頭、或者其他字元開頭
以上情況就把特殊情況包含進去了,接下來是處理數字字串的情況,處理以上情況後我們能得到乙個新的字串,字串開頭為我們要轉化的數字,這時我們要考慮一下情況:
1、數字字串為空串
2、數字字串以0開頭
3、數字字串過濾掉開頭0以後變為了空串
處理了以上情況後我們就得到了要轉化為數字的字串,要求這個數字在int範圍內,因為長度超過10的都可以pass,其他的直接用long來轉化,再與int範圍進行比較進行相應輸出。
三、**
public class leetcode8
public static int myatoi(string str)
//過濾字串開頭空格
int pos = 0;
while (pos < str.length() && str.charat(pos) == ' ')
str = str.substring(pos, str.length());
//過濾空串
if ("".equals(str))
//資料為正或負 true為正
boolean operator = true;
string numstring;
//字串開頭非數字情況
if (str.charat(0) < '0' || str.charat(0) > '9')
//數字為負數
if (str.charat(0) == '-')
//獲取數值
numstring = getnumstr(str.substring(1, str.length()));
} else
//過濾資料部分為空串的情況
if ("".equals(numstring))
//過濾掉資料超出long的情況
if (numstring.length() > 10) else
}//轉化數值
long num = long.parselong(numstring);
if (!operator)
//根據結果範圍返回數值
if (num < integer.min_value)
if (num > integer.max_value)
return (int) num;
}/**
* 擷取字串的開頭數值
** @param s 字串
* @return 數值字串
*/private static string getnumstr(string s)
isstart = false;
} else
}return num.tostring();
}}
四、總結 8 字串轉整數(atoi)
實現atoi,將字串轉為整數。說明 這題解釋的比較模糊 即沒有指定輸入格式 你得事先匯集所有的輸入情況。atoi的要求 這個函式需要丟棄之前的空白字元,直到找到第乙個非空白字元。之後從這個字元開始,選取乙個可選的正號或負號後面跟隨盡可能多的數字,並將其解釋為數字的值。字串可以在形成整數的字元後包括多...
8 字串轉整數 atoi
測試案例 2 預期是0 2.14預期是2 0 123 預期是0 9223372036854775808 預期是2147483647 234 預期是0 123 預期是123 下面是反覆根據測試案例最後除錯成功,考慮情況太多複雜。不太好。class solution int temp str i 0 i...
LeetCode 8 字串轉整數(atoi
實現 atoi,將字串轉為整數。說明 這題解釋的比較模糊 即沒有指定輸入格式 你得事先匯集所有的輸入情況。atoi的要求 這個函式需要丟棄之前的空白字元,直到找到第乙個非空白字元。之後從這個字元開始,選取乙個可選的正號或負號後面跟隨盡可能多的數字,並將其解釋為數字的值。字串可以在形成整數的字元後包括...