zoukankan      html  css  js  c++  java
  • 【LeetCode-数学】Excel表列序号

    题目描述

    给定一个Excel表格中的列名称,返回其相应的列序号。
    字母和数字的对应关系如下

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

    示例:

    输入: "A"
    输出: 1
    
    输入: "AB"
    输出: 28
    
    输入: "ZY"
    输出: 701
    

    题目链接: https://leetcode-cn.com/problems/excel-sheet-column-number/

    思路1

    这个问题是 26 进制数转 10 进制数的问题。对于 10 进制数 1986 有

    1986 = 1*10^3+9*10^2+8*10^1+6*10^1
    

    所以,对于 26 进制数 AB 来说,有

    AB = A*26 + B = 1*26 + 2 = 28
    

    代码如下:

    class Solution {
    public:
        int titleToNumber(string s) {
            if(s.empty()) return 0;
    
            if(s.size()==1) return s[0]-'A'+1;
            int ans = 0;
            int n = s.size();
            for(int i=n-1; i>=0; i--){
                ans = ans + (s[i]-'A'+1)*pow(26, n-i-1);
           }
            return ans;
         }
    };
    

    上面是反向遍历的,也可以正向遍历

    class Solution {
    public:
        int titleToNumber(string s) {
            if(s.empty()) return 0;
    
            if(s.size()==1) return s[0]-'A'+1;
            int ans = 0;
            int n = s.size();
            for(int i=0; i<n; i++){
                if(i<n-1) ans = ans + (s[i]-'A'+1)*pow(26, n-1-i);
                else ans += s[i]-'A'+1;
            }
            return ans;
         }
    };
    

    思路2

    正向遍历有更简单的写法。考虑 10 进制数 1986:

    int ans = 0;
    ans = ans*10 + 1; // 1
    ans = ans*10 + 9; // 19
    ans = ans*10 + 8; // 19
    ans = ans*10 + 6; // 1986
    

    所以,对于 26 进制数 AB:

    int ans = 0;
    ans = ans*26 + A; // 1
    ans = ans*26 + B; // 1*26+2=28
    

    代码如下:

    class Solution {
    public:
        int titleToNumber(string s) {
            if(s.empty()) return 0;
    
            if(s.size()==1) return s[0]-'A'+1;
            int ans = 0;
            int n = s.size();
            for(int i=0; i<n; i++){
                ans = ans*26 + (s[i]-'A'+1); // 别忘了加括号
           }
            return ans;
         }
    };
    

    参考

    https://leetcode-cn.com/problems/reverse-bits/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by-4-9/

  • 相关阅读:
    javascript 原型世界浅析
    zookeeper
    Message Queue
    js给对象onclick事件赋值
    什么是堡垒机
    什么是数据库实例
    动态规划解决矩阵路径问题
    0-1背包问题
    回溯算法
    Python列表的复制
  • 原文地址:https://www.cnblogs.com/flix/p/13301968.html
Copyright © 2011-2022 走看看