[英]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.