力扣简单题:Excel 表列序号,多数元素,Excel表列名称

发布于:2023-05-09 ⋅ 阅读:(358) ⋅ 点赞:(0)

1. Excel 表列序号

给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。

例如:

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

示例 1:

输入: columnTitle = "A"
输出: 1

示例 2:

输入: columnTitle = "AB"
输出: 28

思路:就是一个 26进制 转 10进制的题目,我们从高位开始遍历. 将 A-Z 转变成 1-26. 然后遍历第二位时 ax26 + b 得新的数据

/**
 * @param {string} columnTitle
 * @return {number}
 */
var titleToNumber = function(columnTitle) {
  if(!columnTitle) return 0
  let result = 0
  for(let i =0; i < columnTitle.length; i++) {
    result = result * 26 + (columnTitle[i].charCodeAt() - 64)
  }
  return result
};

2. 多数元素

给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例 1:

输入:nums = [3,2,3]
输出:3

示例 2:

输入:nums = [2,2,1,1,1,2,2]
输出:2

大于一半的数,也就是所肯定只有一个这样的数,而且题目说了,给的数组都有这样的数,那就不用考虑没有的条件。

var majorityElement = function(nums) {
    return nums.sort()[Math.floor(nums.length/2)];
};

3. Excel表列名称

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

例如:
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...
 

示例 1:

输入:columnNumber = 1
输出:"A"

示例 2:

输入:columnNumber = 28
输出:"AB"
/**
 * @param {number} columnNumber
 * @return {string}
 */
var convertToTitle = function(n) {
    if (n <= 0) return "";
    let res = [];
    while(n) {
      let remain = n % 26 ? n % 26 : 26; // 类似 十进制的 521 进行不断取余
      res.unshift(String.fromCharCode(remain + 64)); // 然后余数 + 64 获得字符(不是+65的原因是题目的A从1开始,要减去1)
      n = Math.floor((n - remain) / 26); // 然后减去余数再除26,刚好除得尽,新的一位开始
    }
    return res.join("");
};
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到