每日算法(45)

44期问题及答案

Excel表列名称

题目描述:

给定一个正整数,返回它在 Excel 表中相对应的列名称。

例如:

1 -> "A"
2 -> "B"
3 -> "C"
...
26 -> "Z"
27 -> "AA"
28 -> "AB"
...

示例 1:

输入: 1输出: "A"

示例 2:

输入: 28输出: "AB"

示例 3:

输入: 701输出: "ZY"

提示:

  • 1 <= n <=

以下是使用 TypeScript 实现的解答:

function convertToTitle(n: number): string {
  let result = '';

  while (n > 0) {
    n--; // 将 1-26 映射为 0-25
    const char = String.fromCharCode((n % 26) + 65); // 余数对应 A-Z 的 ASCII 码值
    result = char + result;
    n = Math.floor(n / 26);
  }

  return result;
}

解题思路:

  • 将给定的十进制数转换为 26 进制的形式,其中 A 表示 1,B 表示 2,以此类推。

  • 从给定的数 n 开始,每次取余数和商,余数对应 A-Z 的 ASCII 码值。

  • 将每个余数对应的字符拼接到结果字符串的开头。

  • 更新 n 的值为商,重复上述步骤,直到 n 变为 0。

  • 最终得到的结果字符串即为 Excel 表中相对应的列名称。

时间复杂度分析:

  • n 的大小决定了循环的次数,时间复杂度与 n 的位数相关,为 O(logN)。

空间复杂度分析:

  • 使用了一个字符串来存储结果,空间复杂度为 O(logN)。

45期

实现 Trie (前缀树)

题目描述:

实现一个 Trie (前缀树),包含 insertsearchstartsWith 三个操作。

示例:

Trie trie = new Trie();

trie.insert("apple");
trie.search("apple");   // 返回 true
trie.search("app");     // 返回 false
trie.startsWith("app"); // 返回 true
trie.insert("app");
trie.search("app");     // 返回 true

说明:

  • 你可以假设所有的输入都是由小写字母 a-z 构成的。

  • 保证所有输入均为非空字符串。

上面问题的答案会在第二天的公众号推文中公布,大家可以关注公众号:程序员每日三问,第一时间获得推送内容。

学习不打烊,充电加油只为遇到更好的自己,每天早上9点纯手工发布面试题(死磕自己,愉悦大家) 希望大家在这浮夸的程序员圈里保持冷静,每天坚持花20分钟来学习与思考,在千变万化,类库层出不穷的今天,不要等到找工作时才狂刷题,提倡每日学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值