Skip to content

获取1-10000所有的回文数

仲灏2022-05-31约 1 分钟

获取1-10000所有的回文数

typescript

/**
 * @description: api
 * @author: 仲灏<izhaong@outlook.com>🌶🌶🌶
 * @param {number} max
 * @return {*}
 */
function findPalindromeNumbers1(max: number): number[] {
    const res: number[] = [];
    if (max <= 0) return res;

    for (let i = 0; i < max; i++) {
        const s = i.toString();
        if (s === s.split('').reverse().join('')) {
            res.push(i);
        }
    }
    return res;
}

/**
 * @description: 字符串
 * @author: 仲灏<izhaong@outlook.com>🌶🌶🌶
 * @param {number} max
 * @return {*}
 */
function findPalindromeNumbers2(max: number): number[] {
    const res: number[] = [];
    if (max <= 0) return res;

    for (let i = 0; i < max; i++) {
        const s = i.toString();
        let start = 0;
        let end = s.length - 1;
        let flag = true;
        while (start < end) {
            if (s[start] !== s[end]) {
                flag = false;
                break;
            } else {
                start++;
                end--;
            }
        }
        if (flag) res.push(i);
    }
    return res;
}

/**
 * @description: 数字
 * @author: 仲灏<izhaong@outlook.com>🌶🌶🌶
 * @param {number} max
 * @return {*}
 */
function findPalindromeNumbers3(max: number): number[] {
    const res: number[] = [];
    if (max <= 0) return res;

    for (let i = 0; i < max; i++) {
        let n = i; // 123 12 1 0
        let rev = 0; // 0 3 32 321

        while (n > 0) {
            // t t t t f
            rev = rev * 10 + (n % 10); // 0+3 30+2 320+1
            n = Math.floor(n / 10); // 12 1 0
        }
        if (rev === i) res.push(i);
    }
    return res;
}

单元测试

功能测试

js
console.log(findPalindromeNumbers1(10 * 1000));
console.log(findPalindromeNumbers2(10 * 1000));
console.log(findPalindromeNumbers3(10 * 1000));

image-20220531180931347

性能测试

typescript
const num = 1000 * 1000
console.time('findPalindromeNumbers1')
findPalindromeNumbers1(num)
console.timeEnd('findPalindromeNumbers1') // 284ms

console.time('findPalindromeNumbers2')
findPalindromeNumbers2(num)
console.timeEnd('findPalindromeNumbers2') // 48ms

console.time('findPalindromeNumbers3')
findPalindromeNumbers3(num)
console.timeEnd('findPalindromeNumbers3') // 34ms

讨论区

欢迎留下想法与补充