• home > theory > algorithm > leetcode >

    26进制转换:转换函数将数字转成对应的大写字母

    Author:zhoulujun Date:

    完成一个转换函数,将数字转成对应的大写字母,满足下面的对应关系,完成一个转换函数,将数字转成对应的大写字母,满足下面的对应关系1 => A; 2 => B; 3 => C 26 => Z; 27 => AA;28 => AB;29 => AC 。跟进制可以扯上关系

    昨天看了一道题,惭愧,闹到一浆糊了,都没有写出来,题目内容如下:

    完成一个转换函数,将数字转成对应的大写字母,满足下面的对应关系

     1 => A;   2 => B;    3 => C ... 

    26 => Z; 27 => AA;28 => AB;29 => AC ...

    52 => AZ; 53 => BA;54 => BB;    ...

     这个题目我想了到了进制转换。二进制转换就是一直除以2。除以转换的进制 数。但是这个算法,我都没有写出来。

    今天

    /**
     * 获取字符串,比较笨的写法 let arr = [A-z]
     * @param start {number} 开始字符
     * @param num {number} 获取多少个
     * @return {[]} 返回字符串数组
     */
    function getLetters (start = 65, num = 26) {
      let end = start + num;
      let arr = [];
      while (start < end) {
        arr.push(String.fromCharCode(start));
        start++;
      }
      return arr;
    }
    
    /**
     * 26进制转换函数
     * @param num {number} 转换数组
     * @return {unknown[]}
     */
    function convert (num) {
      if (Object.prototype.toString.call(num)!=='[object Number]'||isNaN(num)) {
        throw new Error('输入的不是数字');
      }
      let letters = getLetters();
      let m = (num).toString(26).split('');
      return m.map((num) => {
        num = parseInt(num);
        if (num === 0) {
          return 'Z';
        } else {
          return letters[num - 1];
        }
      });
    }
    
    console.log(convert(1));
    console.log(convert(2));
    console.log(convert(26));
    console.log(convert(27));
    console.log(convert(28));
    console.log(convert(29));
    console.log(convert(52));
    console.log(convert(53));
    console.log(convert(54));

    再想想,可以优化下:

    function decimalTo26Alphabet(num) {
        let result = '';
        
        while (num > 0) {
            let charCode = (num - 1) % 26;
            result = String.fromCharCode(65 + charCode) + result; // 65是字母A的ASCII码
            num = Math.floor((num - 1) / 26);
        }
        
        return result;
    }
    
    // 测试代码
    console.log(decimalTo26Alphabet(1)); // A
    console.log(decimalTo26Alphabet(26)); // Z
    console.log(decimalTo26Alphabet(27)); // AA
    console.log(decimalTo26Alphabet(28)); // AB
    console.log(decimalTo26Alphabet(52)); // AZ
    console.log(decimalTo26Alphabet(53)); // BA
    console.log(decimalTo26Alphabet(54)); // BB


    多简单呀。居然写了半天写不出来。有时候脑壳卡壳。就是没有思路

    还有一个就晚睡。前天晚睡2点才睡。

    所以还是早睡早起,如果问题卡主了。待会儿在来想。






    转载本站文章《26进制转换:转换函数将数字转成对应的大写字母》,
    请注明出处:https://www.zhoulujun.cn/html/theory/algorithm/leetcode/8501.html