leetcode5
顺次数
我们定义「顺次数」为:每一位上的数字都比前一位上的数字大 1
的整数。
请你返回由 [low, high]
范围内所有顺次数组成的 有序 列表(从小到大排序)。
示例 1:
输出:low = 100, high = 300 输出:[123,234]
示例 2:
输出:low = 1000, high = 13000 输出:[1234,2345,3456,4567,5678,6789,12345]
提示:
10 <= low <= high <= 10^9
/** * @param {number} low * @param {number} high * @return {number[]} */ var sequentialDigits = function(low, high) { const result = []; for (let i = 2; i < 10; i++) { for (let j = 1; j < 11 - i; j++) { let temp = 0; for (let k = 0; k < i; k++) { temp = temp * 10 + k + j; } result.push(temp); } } return result.filter(item => item >= low && item <= high); };
var sequentialDigits = function(low, high) { let highstr = high.toString() let lowstr = low.toString() let maxlen = highstr.length; let minlen = lowstr.length; const result = [] L1: for(let i = minlen; i <= maxlen; i++) { L2: for (let j = 1; j <= 10-i; j++) { let str = '' let time = i let el = j while (time--) { str += (el++).toString() } if (str > high) { break L1 } if (str < low) { continue L2 } result.push(str) } } return result };
/** * @param {number} low * @param {number} high * @return {number[]} */
// 复盘: // 最终还是没提交上去,差1~2分分钟,要不是可以排名靠前100余名,有大量参与者做了2道题,
// 但是,很多人仅仅用了10几分钟就把这道题搞定。我足足用了80几分钟才做完。最后那几分钟,有个测试用例出现GC问题,
// 其实是一个死循环导致的,后来又一个测试用例改了一下出现了第一个数字和第二个数字可能相同。我改前面的判断逻辑,改来改去还是问题。
// 后来,时间到了,一想,还不如“去重”,一想代码量又有点多,最后也就几个代码判断是否往数组里面push相同的num,解决。伤感!!!! var sequentialDigits = function(low, high) { let res = []; let lowStr = String(low); let len = lowStr.length; let flag = true; for(let i=lowStr.length-1; i>=1; i--){ let l1 = lowStr[i]; let l2 = lowStr[i-1]; if(Number(l1)-Number(l2)!==1){ flag = false } } if(flag){ res.push(low) } let num = lowStr; let first = true; while(Number(num)<=high && num != '123456789'){ let f if(!first){ f = Number(num[0])+1; }else{ f = num[0]; } first = false; let len1 = len; num = ''; let index = 0; while(len1--){ if(num[num.length-1]==='9'){ if(len1 >= 9){ break; } num = ''; index = 0; f = 1; len++; len1 = len; continue; } // f = ; num+=Number(f)+index; index++; } let num1 = Number(num); if(low<=num1 && num1<=high){ if(res.indexOf(num1) === -1) res.push(num1) } } return res; };