国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

LeetCode 之 JavaScript 解答第8題 —— 字符串轉換整數 (String to

zhisheng / 904人閱讀

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

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

題目:String To Integer(字符串轉換整數 (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.

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

首先,該函數會根據需要丟棄無用的開頭空格字符,直到尋找到第一個非空格的字符為止。

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

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

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

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

說明:

假設我們的環境只能存儲 32 位大小的有符號整數,那么其數值范圍為 [?231, 231 ? 1]。如果數值超過這個范圍,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:
▉ 問題分析

將字符串轉化為數字,根據題目要求可以分出一下幾種情況:

如果字符串都是數字,直接進行轉換。

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

數字前正負號要保留。

如果字符串中有數字和字母。

字母在數字前,直接返回數字 0 ;

字母在數字后,忽略數字后的字母;

如果輸出的數字大于限制值,輸出規定的限制值。

如果輸出的數字小于限制值,輸出規定的限制值。

上述將所有條件弄明白之后,然后進行規劃解決上述問題:

▉ 算法思路
整體將字符串轉化為每個字符來進行判斷:

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

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

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

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

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

2)帶空格、負數的字符串

3)帶字母的字符串

4)空字符串

5)超出限制的字符串

▉ 代碼實現
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:記錄正負號
    // base: 記錄數字的位數
    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) == "-"){       // 記錄正負號
        sign = 1 - 2 * ((str.charAt(index++) == "-") ? 1 : 0);
    }

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


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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/103728.html

相關文章

  • LeetCode JavaScript 解答150 —— 逆波蘭表達式求值

    摘要:小鹿題目根據逆波蘭表示法,求表達式的值。給定逆波蘭表達式總是有效的。算法思路仔細觀察上述的逆波蘭表達式,可以發現一個規律就是每遇到一個操作符,就將操作符前的兩個操作數進行運算,將結果保存到原位置。 Time:2019/4/14Title: Evaluate Reverse Polish NotationDifficulty: MediumAuthor:小鹿 題目:Evaluate ...

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

    摘要:測試用例輸入輸入輸入負數的輸入平方根為正整數的輸入平方根為小數的代碼實現寫二分查找代碼需要注意的三點循環退出條件。使用二分查找之前,判斷問題是否滿足二分查找的要求。 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)

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

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

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

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

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

    betacat 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<