xgqfrms™, xgqfrms® : xgqfrms's offical website of cnblogs! xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!

LeetCode 算法题解之 26 进制转换 All In One

LeetCode 算法题解之 26 进制转换 All In One

进制转换

image

26 进制转换

171. Excel Sheet Column Number / 171. Excel 工作表列号

function titleToNumber(columnTitle: string): number {
  // 如何动态生成 字典 ✅ 26 进制
  // A-Z -> 1-26
  const strs = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  const obj = {};
  for(let i = 0; i < strs.length; i++) {
    obj[strs[i]] = i + 1;
  }
  let result = 0
  const arr = columnTitle.split('')
  let n = arr.length;
  for(let i = 0; i < n; i++) {
    let num = obj[arr[i]];
    result += num * 26 ** (n - i - 1);
  }
  return result
};


/* 

str = `A`
str.charAt(0)
// 65
str.charCodeAt(0)
// 65
str.codePointAt(0)
// 65

 */

https://leetcode.com/problems/excel-sheet-column-number/

168. Excel Sheet Column Title /168. Excel 工作表列头

function convertToTitle(n: number): string {
  let result = ``
  while (n > 0) {
    // 取余数
    let digit = n % 26
    // 向下取整,防止小数 bug ✅
    n = Math.floor(n / 26)
    if (digit === 0) {
      n -= 1
      digit = 26
    }
    // 64 => '@',ASCII code / UTF-16
    let char = String.fromCharCode(64 + digit)
    // 前面插入
    result = char + result
  }
  return result
};

/* 

ASCII code / UTF-16

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode


 */

// function convertToTitle(columnNumber:number):string {
//   let str:string = ``;
//   let num:number;
//   while (columnNumber > 0) {
//     // ???
//     num = (columnNumber - 1) % 26;
//     str = String.fromCharCode(num + 65) + str;
//     columnNumber = Math.floor((columnNumber - num) / 26);
//   }
//   return str;
// };

// function convertToTitle(columnNumber: number): string {
//   // 如何动态生成 字典 ✅ 26 进制
//   // A-Z -> 1-26
//   const strs = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
//   const obj = {};
//   for(let i = 0; i < strs.length; i++) {
//     // obj[strs[i]] = i + 1;
//     obj[i + 1] = strs[i];
//   }
//   // const dict = new Map();
//   let num = columnNumber;
//   let n = 1;
//   let result = ``;
//   // 求余数
//   let rest = num % 26;
//   if(rest === 0) {
//     result += obj[26];
//   } else {
//     result += obj[rest];
//   }
//   // 减余数
//   num = num - rest;
//   // 进位,n 倍
//   while(num > 0) {
//     // 求除数 ❌
//     // let left = num / (26 ** n);
//     let left = Math.floor(num / (26 ** n));
//     if(left > 26) {
//       left = 26
//       result += obj[26];
//     } else {
//       result += obj[left];
//     }
//     // 进位,n 倍
//     num = num - (left * 26 ** n);
//     n += 1;
//   }
//   // console.log(`result =`, result)
//   return [...result].reverse().join(``);
// };

/* 

2147483647
"denifednuZZZZZW" ❌
"FXSHRXW" 

"YZY"
25 * 26 * 26 +
26 * 26 +
25

17601



"AZY"
1 * 26 * 26 +
26 * 26 + 25
1377

  // 26**1 -> Z
  // 26**2 -> ZZ ??? 没有 0 怎么进位 ❓
  // 2 进制 0 ~ 1,8 进制 0 ~ 7, 16 进制 0 ~ F

"ZY"
26 * 26 + 25
701


 */

/* 

1
28
701
17601

Input: columnNumber = 701
Output: "ZY"

26 * 26 + 25
701

26 进制 ✅

{1: 'A', 2: 'B', 3: 'C', 4: 'D', 5: 'E', 6: 'F', 7: 'G', 8: 'H', 9: 'I', 10: 'J', 11: 'K', 12: 'L', 13: 'M', 14: 'N', 15: 'O', 16: 'P', 17: 'Q', 18: 'R', 19: 'S', 20: 'T', 21: 'U', 22: 'V', 23: 'W', 24: 'X', 25: 'Y', 26: 'Z'}

 */

https://leetcode.com/problems/excel-sheet-column-title/

demos

(🐞 反爬虫测试!打击盗版⚠️)如果你看到这个信息, 说明这是一篇剽窃的文章,请访问 https://www.cnblogs.com/xgqfrms/ 查看原创文章!

refs

ASCII code / UTF-16

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode



©xgqfrms 2012-2021

www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!

原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!


posted @ 2023-08-23 14:39  xgqfrms  阅读(23)  评论(0编辑  收藏  举报