免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
LeetCode 8. 字符串轉(zhuǎn)換整數(shù) (atoi)

我的LeetCode:https://leetcode-cn.com/u/ituring/

我的LeetCode刷題源碼[GitHub]:https://github.com/izhoujie/Algorithmcii

LeetCode 8. 字符串轉(zhuǎn)換整數(shù) (atoi)

題目

請你來實現(xiàn)一個 atoi 函數(shù),使其能將字符串轉(zhuǎn)換成整數(shù)。

首先,該函數(shù)會根據(jù)需要丟棄無用的開頭空格字符,直到尋找到第一個非空格的字符為止。接下來的轉(zhuǎn)化規(guī)則如下:

  • 如果第一個非空字符為正或者負號時,則將該符號與之后面盡可能多的連續(xù)數(shù)字字符組合起來,形成一個有符號整數(shù)。

  • 假如第一個非空字符是數(shù)字,則直接將其與之后連續(xù)的數(shù)字字符組合起來,形成一個整數(shù)。

  • 該字符串在有效的整數(shù)部分之后也可能會存在多余的字符,那么這些字符可以被忽略,它們對函數(shù)不應該造成影響。

注意:假如該字符串中的第一個非空格字符不是一個有效整數(shù)字符、字符串為空或字符串僅包含空白字符時,則你的函數(shù)不需要進行轉(zhuǎn)換,即無法進行有效轉(zhuǎn)換。

在任何情況下,若函數(shù)不能進行有效的轉(zhuǎn)換時,請返回 0 。

提示:

  • 本題中的空白字符只包括空格字符 ' ' 。

  • 假設我們的環(huán)境只能存儲 32 位大小的有符號整數(shù),那么其數(shù)值范圍為 [?2^31,  2^31 ? 1]。如果數(shù)值超過這個范圍,請返回  INT_MAX (2^31 ? 1) 或 INT_MIN (?2^31) 。

示例 1:

輸入: "42"輸出: 42

示例 2:

輸入: "   -42"輸出: -42解釋: 第一個非空白字符為 '-', 它是一個負號。     我們盡可能將負號與后面所有連續(xù)出現(xiàn)的數(shù)字組合起來,最后得到 -42 。

示例 3:

輸入: "4193 with words"輸出: 4193解釋: 轉(zhuǎn)換截止于數(shù)字 '3' ,因為它的下一個字符不為數(shù)字。

示例 4:

輸入: "words and 987"輸出: 0解釋: 第一個非空字符是 'w', 但它不是數(shù)字或正、負號。     因此無法執(zhí)行有效的轉(zhuǎn)換。

示例 5:

輸入: "-91283472332"輸出: -2147483648解釋: 數(shù)字 "-91283472332" 超過 32 位有符號整數(shù)范圍。      因此返回 INT_MIN (?231) 。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/string-to-integer-atoi
著作權(quán)歸領扣網(wǎng)絡所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

解題思路

atoi:ascii to integer
C和C#庫有自帶的atoi函數(shù),但是Java并沒有,Java中與之相似的是Integer的 parseInt()系列方法,是雙參方法,多進制的轉(zhuǎn)化,可以看源碼了解下;

思路1-先左右去空白字符,然后校驗首字符為+和-的情況,最后逐個字符進行轉(zhuǎn)化即可,注意溢出判斷

步驟:

  1. 使用String的trim()方法對原字符串兩端的空白字符預處理;

  2. 判斷與處理后字符長度,必須大于1才能繼續(xù),先取低一個字符對+和-情況處理;

  3. 依次逐個字符轉(zhuǎn)化,注意溢出判斷處理;

總結(jié):atoi的轉(zhuǎn)換并不難,唯一需要注意的溢出判斷的邏輯

算法源碼示例

package leetcode;/** * @author ZhouJie * @date 2019年12月10日 下午6:13:52  * @Description:8. 字符串轉(zhuǎn)換整數(shù) (atoi) * */public class LeetCode_0008 {	public static void main(String[] args) {		Solution_0008 solution_0008 = new Solution_0008();		System.out.println(solution_0008.myAtoi("2147483648"));		Double.valueOf("53454.sdrf");	}}class Solution_0008 {	/**	 * @author ZhouJie	 * @date 2019年12月10日 下午7:00:52 	 * @Description: TODO(方法簡述) 	 * @return int 	 * @UpdateUser-UpdateDate:[ZhouJie]-[2019年12月10日 下午7:00:52]  	 * @UpdateRemark:1-思路:	 * 					-先trim()左右去空并再次驗非空;	 * 					-校驗首字符是+-的情況	 * 					-逐個取字符轉(zhuǎn)化數(shù)字并校驗是否溢出	 */	public int myAtoi(String str) {		if (str == null) {			return 0;		}		// 去除左右空白字符,且去除后長度不能為0		str = str.trim();		int len = str.length();		if (len < 1) {			return 0;		}		int flag = 1;		int i = 0;		char c = str.charAt(0);		// 首個字符為+或-的預處理,同時記錄符號		if (c == '-' || c == '+') {			i = 1;			if (c == '-') {				flag = -1;			}		}		int rst = 0;		int check = 0;		// 逐個字符轉(zhuǎn)化,每次/10與上一次的值校驗用以判斷是否溢出		for (; i < len; i++) {			int num = str.charAt(i) - '0';			if (num >= 0 && num <= 9) {				rst = rst * 10 + num * flag;				// 溢出校驗,若本次結(jié)果已溢出,那么當前值/10必不等于上一次的值,利用溢出去校驗溢出,巧妙				if (rst / 10 != check) {					return flag == 1 ? ((1 << 31) - 1) : (-1 << 31);				}				check = rst;			} else {				return rst;			}		}		return rst;	}}
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C語言字符串,字符轉(zhuǎn)數(shù)字,數(shù)字轉(zhuǎn)字符(轉(zhuǎn))
C語言itoa()函數(shù)和atoi()函數(shù)詳解(整數(shù)轉(zhuǎn)字符C實現(xiàn))
字符串轉(zhuǎn)換整數(shù)及整數(shù)轉(zhuǎn)換字符串
C語言atoi()函數(shù):將字符串轉(zhuǎn)換成int(整數(shù))
leetcode - 整數(shù)反轉(zhuǎn)
LeetCode實戰(zhàn):最長回文子串
更多類似文章 >>
生活服務
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服