成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

LeetCode 之 JavaScript 解答第8題 —— 字符串轉(zhuǎn)換整數(shù) (String to

zhisheng / 910人閱讀

摘要:當(dāng)我們尋找到的第一個(gè)非空字符為正或者負(fù)號時(shí),則將該符號與之后面盡可能多的連續(xù)數(shù)字組合起來,作為該整數(shù)的正負(fù)號假如第一個(gè)非空字符是數(shù)字,則直接將其與之后連續(xù)的數(shù)字字符組合起來,形成整數(shù)。數(shù)字前正負(fù)號要保留。

Time:2019/4/19
Title: String To Integer
Difficulty: Medium
Author: 小鹿

題目:String To Integer(字符串轉(zhuǎn)換整數(shù) (atoi))

Implement atoi which converts a string to an integer.

The function first discards as many whitespace characters as necessary until the first non-whitespace character is found. Then, starting from this character, takes an optional initial plus or minus sign followed by as many numerical digits as possible, and interprets them as a numerical value.

The string can contain additional characters after those that form the integral number, which are ignored and have no effect on the behavior of this function.

If the first sequence of non-whitespace characters in str is not a valid integral number, or if no such sequence exists because either str is empty or it contains only whitespace characters, no conversion is performed.

If no valid conversion could be performed, a zero value is returned.

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

首先,該函數(shù)會(huì)根據(jù)需要丟棄無用的開頭空格字符,直到尋找到第一個(gè)非空格的字符為止。

當(dāng)我們尋找到的第一個(gè)非空字符為正或者負(fù)號時(shí),則將該符號與之后面盡可能多的連續(xù)數(shù)字組合起來,作為該整數(shù)的正負(fù)號;假如第一個(gè)非空字符是數(shù)字,則直接將其與之后連續(xù)的數(shù)字字符組合起來,形成整數(shù)。

該字符串除了有效的整數(shù)部分之后也可能會(huì)存在多余的字符,這些字符可以被忽略,它們對于函數(shù)不應(yīng)該造成影響。

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

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

說明:

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

Note:

Only the space character " " is considered as whitespace character.

Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [?231, 231 ? 1]. If the numerical value is out of the range of representable values, INT_MAX (231 ? 1) or INT_MIN (?231) is returned.

Example 1:

Input: "42"
Output: 42

Example 2:

Input: "   -42"
Output: -42
Explanation: The first non-whitespace character is "-", which is the minus sign.
             Then take as many numerical digits as possible, which gets 42.

Example 3:

Input: "4193 with words"
Output: 4193
Explanation: Conversion stops at digit "3" as the next character is not a numerical digit.

Example 4:

Input: "words and 987"
Output: 0
Explanation: The first non-whitespace character is "w", which is not a numerical 
             digit or a +/- sign. Therefore no valid conversion could be performed.

Example 5:

Input: "-91283472332"
Output: -2147483648
Explanation: The number "-91283472332" is out of the range of a 32-bit signed integer.
             Thefore INT_MIN (?231) is returned.
Solve:
▉ 問題分析

將字符串轉(zhuǎn)化為數(shù)字,根據(jù)題目要求可以分出一下幾種情況:

如果字符串都是數(shù)字,直接進(jìn)行轉(zhuǎn)換。

如果字符串中只有數(shù)字和空格,要跳過空格,只輸出數(shù)字。

數(shù)字前正負(fù)號要保留。

如果字符串中有數(shù)字和字母。

字母在數(shù)字前,直接返回?cái)?shù)字 0 ;

字母在數(shù)字后,忽略數(shù)字后的字母;

如果輸出的數(shù)字大于限制值,輸出規(guī)定的限制值。

如果輸出的數(shù)字小于限制值,輸出規(guī)定的限制值。

上述將所有條件弄明白之后,然后進(jìn)行規(guī)劃解決上述問題:

▉ 算法思路
整體將字符串轉(zhuǎn)化為每個(gè)字符來進(jìn)行判斷:

1)空格:如果當(dāng)前的字符為空格,直接跳過,判斷下一字符。

2)符號位:如果判斷當(dāng)前的字符為 “ + ” 或 “ - “,用 sign 存儲(chǔ) 1 或 -1,最后乘最后得出的數(shù)字。

3)只取數(shù)字:判斷當(dāng)前是否滿足條件(0<= c <=9),不滿足條件直接跳出循環(huán)。

4)雖然取到數(shù)字,判斷數(shù)字是否超出最大值/最小值,我們用判斷位數(shù),最大值為 7 位,每遍歷一個(gè)數(shù)組,我們就進(jìn)行乘以 10 加 個(gè)位數(shù)。

▉ 測試用例
1)只輸入數(shù)字字符串

2)帶空格、負(fù)數(shù)的字符串

3)帶字母的字符串

4)空字符串

5)超出限制的字符串

▉ 代碼實(shí)現(xiàn)
var myAtoi = function(str) {
    // 最大值與最小值
    let MAX_VALUE = Math.pow(2,31)-1;
    let MIN_VALUE = -Math.pow(2,31);
    // 判斷字符窗是否為空
    if(str == null || str.length == 0) return 0;
    // 初始化
    // sign:記錄正負(fù)號
    // base: 記錄數(shù)字的位數(shù)
    let [index,base,sign,len] = [0,0,1,str.length];

    // 跳過空格
    while(index < len && str.charAt(index) == " "){
        index++;
    }

    // 獲取符號位
    if(index < len && (str.charAt(index) == "+") || str.charAt(index) == "-"){       // 記錄正負(fù)號
        sign = 1 - 2 * ((str.charAt(index++) == "-") ? 1 : 0);
    }

    // 只取數(shù)字,碰到非數(shù)字退出循環(huán)
    while(index < len && parseInt(str.charAt(index)) >= 0 && parseInt(str.charAt(index)) <= 9){
        // 溢出判斷,MAX_VALUE 的個(gè)位為 7
        if(base > parseInt(MAX_VALUE/10) || (base == parseInt(MAX_VALUE/10) && parseInt(str.charAt(index)) > 7)){
            if(sign == 1){
                return MAX_VALUE;
            }else{
                return MIN_VALUE;
            }
        } 
        // 記錄位數(shù)
        base = base * 10 + parseInt(str.charAt(index++));                
    }
    // 返回符號位 * 當(dāng)前字符串中的數(shù)字
    return sign * base;
};
▉ 考查內(nèi)容
1)對字符串的基本操作。
2)代碼的全面性、魯棒性。


歡迎一起加入到 LeetCode 開源 Github 倉庫,可以向 me 提交您其他語言的代碼。在倉庫上堅(jiān)持和小伙伴們一起打卡,共同完善我們的開源小倉庫!
Github:https://github.com/luxiangqia...
歡迎關(guān)注我個(gè)人公眾號:「一個(gè)不甘平凡的碼農(nóng)」,記錄了自己一路自學(xué)編程的故事。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/103728.html

相關(guān)文章

  • LeetCode JavaScript 解答150 —— 逆波蘭表達(dá)式求值

    摘要:小鹿題目根據(jù)逆波蘭表示法,求表達(dá)式的值。給定逆波蘭表達(dá)式總是有效的。算法思路仔細(xì)觀察上述的逆波蘭表達(dá)式,可以發(fā)現(xiàn)一個(gè)規(guī)律就是每遇到一個(gè)操作符,就將操作符前的兩個(gè)操作數(shù)進(jìn)行運(yùn)算,將結(jié)果保存到原位置。 Time:2019/4/14Title: Evaluate Reverse Polish NotationDifficulty: MediumAuthor:小鹿 題目:Evaluate ...

    104828720 評論0 收藏0
  • LeetCode JavaScript 解答69 —— X 的平方根(Squrt(x))

    摘要:測試用例輸入輸入輸入負(fù)數(shù)的輸入平方根為正整數(shù)的輸入平方根為小數(shù)的代碼實(shí)現(xiàn)寫二分查找代碼需要注意的三點(diǎn)循環(huán)退出條件。使用二分查找之前,判斷問題是否滿足二分查找的要求。 Time:2019/4/17Title: sqrt(x)Difficulty: EasyAuthor: 小鹿 題目:sqrt(x) Implement int sqrt(int x). Compute and retu...

    sf_wangchong 評論0 收藏0
  • JS算法leetcode(1~10)

    摘要:先去空白,去掉空白之后取第一個(gè)字符,判斷正負(fù)符號,若是英文直接返回,若數(shù)字則不取?;匚臄?shù)題目描述判斷一個(gè)整數(shù)是否是回文數(shù)。回文數(shù)是指正序從左向右和倒序從右向左讀都是一樣的整數(shù)。 JS算法題之leetcode(1~10) 前言 一直以來,前端開發(fā)的知識(shí)儲(chǔ)備在數(shù)據(jù)結(jié)構(gòu)以及算法層面是有所暫缺的,可能歸根于我們的前端開發(fā)的業(yè)務(wù)性質(zhì),但是我認(rèn)為任何的編程崗位都離不開數(shù)據(jù)結(jié)構(gòu)以及算法。因此,我作為...

    SoapEye 評論0 收藏0
  • LeetCode JavaScript 解答41 —— 缺失的一個(gè)正數(shù)(First Mis

    摘要:小鹿題目算法思路桶排序思想。再遍歷數(shù)組,從下標(biāo)開始判斷該下標(biāo)是否存放規(guī)定的數(shù)據(jù),如果不是則該下標(biāo)就是這組數(shù)據(jù)中缺失的最小正整數(shù)。桶排序還可以實(shí)現(xiàn)在一組數(shù)據(jù)中查找重復(fù)的數(shù)據(jù)。 Time:2019/4/6Title: First Missing PositiveDifficulty: DifficultyAuthor: 小鹿 題目:First Missing Positive Give...

    levius 評論0 收藏0
  • LeetCode JavaScript 解答151 —— 反轉(zhuǎn)符串中的單詞

    摘要:小鹿題目翻轉(zhuǎn)字符串里的單詞給定一個(gè)字符串,逐個(gè)翻轉(zhuǎn)字符串中的每個(gè)單詞。說明無空格字符構(gòu)成一個(gè)單詞。遇到空格之后,將單詞進(jìn)行倒序拼接。消除尾部的空格。測試用例空字符串。中間空格大于的字符串。 Time:2019/4/20Title: Reverse Words In a StringDifficulty: MidumnAuthor: 小鹿 題目:Reverse Words In a ...

    betacat 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<