LeetCode 171 Excel Sheet Column Number(Excel的列向表数字)

简介: 版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/50499601 翻译给定一个出现在Excel表格上的列表标题,返回它的正确行数。
版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/50499601

翻译

给定一个出现在Excel表格上的列表标题,返回它的正确行数。  

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

原文

Given a column title as appear in an Excel sheet, return its corresponding column number.

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

分析

有了上一题的经验,这次要容易得多了。它的题意也能理解了,就是从上面的实例左侧字符转换成右侧的数字。大家可以看看上一题:LeetCode 168 Excel Sheet Column Title(Excel的列向表标题)

下面是上一题的博客截图,我举了一个进制转换的例子,但是没有说的很明确,那么就在这一题里充分说明一下好了,大家请继续往下看。

这里写图片描述

这里写图片描述

相信有了这个示例,大家就可以秒懂了。

然后我就写了如下代码:

#include <iostream>
using namespace std;

int exponent(int x, int y) {
    int answer = 1;
    for(int i = 0; i < y; ++ i) {
        answer *= x;
    }
    return answer;
}

int titleToNumber(string s) {
    int n = 0, len = s.length();
    for(int i = 0; i < s.length(); ++ i) {
        char c = s[i];
        int chara = c - 'A' + 1;
        n += chara * exponent(26, len - 1 - i);
    }
    return n;
}

int main() {
    cout<<titleToNumber("AAB");
    return 0;
}

输出结果是

704

这是正确的,后来我改成了如下代码:

#include <iostream>
#include <cmath>
using namespace std;

int titleToNumber(string s) {
    int n = 0, len = s.length();
    for(int i = 0; i < s.length(); ++ i) {
        char c = s[i];
        int chara = c - 'A' + 1;
        n += chara * pow(26, len - 1 - i);
    }
    return n;
}

int main() {
    cout<<titleToNumber("AAB");
    return 0;
}

输出是:

703

于是我就纳闷了,后来我从CodeBlocks换到饿了Visual Studio就成了704了,704是正确的。

这里写图片描述

而在CB中把代码改成:

n += chara * (int)pow(26.0, len - 1 - i);

结果反而成了702了。

希望大家发现问题的在下面留言告诉我啊……

如果换成了double的话,在CB中也是OK的:

#include <iostream>
#include <cmath>
using namespace std;

double titleToNumber(string s) {
    double n = 0, len = s.length();
    for(int i = 0; i < s.length(); ++ i) {
        char c = s[i];
        double chara = c - 'A' + 1;
        double a = len - 1 - i;
        n += chara * pow(26.0, a);
    }
    return n;
}

int main() {
    cout<<titleToNumber("AAB");
    return 0;
}

问题是我好想知道它们在CB和VS内部是如何走的……

代码

class Solution {
public:
    int titleToNumber(string s) {
        int n = 0, len = s.length();
        for (int i = 0; i < s.length(); ++i) {
            char c = s[i];
            int chara = c - 'A' + 1;
            n += chara * pow(26, len - 1 - i);
        }
        return n;
    }
};
目录
相关文章
|
8月前
|
easyexcel
【EasyExcel】第二篇:导出excel文件,导出多个sheet工作空间
【EasyExcel】第二篇:导出excel文件,导出多个sheet工作空间
|
4月前
|
Python
pandas 生成 Excel 时的 sheet 问题
pandas 生成 Excel 时的 sheet 问题
44 1
|
4月前
|
Python
Python:Pandas实现批量删除Excel中的sheet
Python:Pandas实现批量删除Excel中的sheet
177 0
|
7月前
|
存储 SQL 算法
LeetCode 题目 65:有效数字(Valid Number)【python】
LeetCode 题目 65:有效数字(Valid Number)【python】
|
8月前
|
存储 算法
【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题
【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题
60 0
|
8月前
|
存储 数据处理 Python
使用Python批量合并Excel文件的所有Sheet数据
使用Python批量合并Excel文件的所有Sheet数据
204 0
|
8月前
|
数据处理 Python
4种方法用Python批量实现多Excel多Sheet合并
4种方法用Python批量实现多Excel多Sheet合并
754 0
|
8月前
|
Java
|
4月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
5月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
130 2