簡體   English   中英

leetcode簡單題中的JS錯誤無限循環

[英]JS error infinite loop in leetcode easy question

我在LeetCode 問題中有這個錯誤。 討論部分的帖子在這里 我是在 JS 中做的,但是在執行某些問題時出現錯誤

描述:

給定一個 integer columnNumber,返回其在 Excel 工作表中顯示的相應列標題。

例如:

A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28 
...

我的解決方案:

/**
 * @param {number} columnNumber
 * @return {string}
 */
var convertToTitle = function(columnNumber) {
   
    const alphabet = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];
   
    var name = "";
    while (columnNumber > 0) {
        name = name.concat(alphabet[columnNumber%26 - 1]);
        columnNumber = columnNumber - columnNumber%26;
    }
    return(name);
};

當我用colNumber < 26 調用 function 時,它就像一個魅力,但為什么當我用更大的數字執行它時代碼會崩潰? 我認為這是一個無限循環,但我不確定。

你可以嘗試在紙上調試,它會幫助你很多。

假設您有一個輸入 = 27

作為第一個循環,它將是

while (columnNumber > 0) {
    name = name.concat(alphabet[columnNumber %26 - 1]); # 
    columnNumber = 27- 27%26; 
  # columnNumber = 27 - 1 , new columnNumber  will be 26
}

看起來它工作得很好但是當你用新的 columnNumber 值 = 26 運行第二個循環時會發生什么

while (columnNumber > 0) {
    name = name.concat(alphabet[columnNumber %26 - 1]); # 
    columnNumber = columnNumber - columnNumber %26; 
  # columnNumber = 26 - 26%26 , 26 mod 26 = 0
  # then you will get you inf loop 26 - 0
}

不錯的練習:快速而骯臟的代碼:

function convertToTitle(columnNumber) {
    columnNumber -= 1;
    let name = "";
    let alphabet = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];
    while (columnNumber >= 0) {
        if (columnNumber > alphabet.length - 1) {
            name = name.concat(alphabet[Math.floor(columnNumber / 25) - 1]);
            columnNumber -= Math.floor(columnNumber / 25) * 25;
            columnNumber -= 1;
        } else {
            name = name.concat(alphabet[columnNumber]);
            break;
        }
    }
    return name;
}

編輯:
控制台 Output

解釋:
1 -> A,但是數組從索引 0 開始,所以columnNumber -= 1
27 -> AB,除以 25 ( alphabet.length - 1 ) 和除法的 rest 得到基數 (A)
如果 columnNumber <26 (你知道,索引從 0 開始)我們可以直接獲取 char。

更簡潔的方法是使用String.charAt(index)

const alphabet = "ABCDEFGHJKLMNOPQRSTUVWXYZ";
alphabet.charAt(0); // returns char at 0 -> A

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM