【Leetcode-171.Excel表列序号 -168.Excel表列名称】

2024-03-01 09:20:41 浏览数 (2)

Leetcode-171.Excel表列序号

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

例如:

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

我们的思路是,从后往前遍历,同时定义一个变量m的初始值为1;先判断这个列的名称的最后一个字母,因为该字母的权位最小,该字母的数值为多少就是多少,如AA,可表达为1 * 26 1,第二个A的值就为1;在计算该字母的数值时,columnTitle[i] - ‘A’ 只是计算columnTitle[i]与’ A '相差的值,所以还要 1才是columnTitle[i] 对应的数值;当i- -,即判断前一位时,m的值要乘26,即前一位的权位就是26,就如AA,表达为1 * 26 1,第一位A的权位就是26,相当于26进制的处理方法;以此类推,每向前一位,m的值就要累计乘以26;再将每一位计算的结果累计加到number中,返回number即可;

代码语言:javascript复制
		int titleToNumber(char* columnTitle)
		{
		    long long m = 1;
		    int number = 0;
		    //从后往前遍历
		    for (int i = strlen(columnTitle) - 1; i >= 0; i--)
		    {
		        number  = (columnTitle[i] - 'A'   1) * m;
		        m *= 26;
		    }
		    return number;
		}

Leetcode-168.Excel表列名称

题目:给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。 例如: A -> 1 B -> 2 C -> 3 … Z -> 26 AA -> 27 AB -> 28 …

我们的思路是,从这个数字表示的列名称从后往前表示,如28表示的是AB,我们先将它减一,算出它除以26的余数是1,再加上字符’ A ',计算表示出来的是B,然后把它放到一个数组中;然后每次计算完一个结果后将这个数除以26,以此类推,最后将字符串逆置即是所求;

代码语言:javascript复制
		void reverse(char* p, int len)
		{
		    int left = 0, right = len - 1;
		    while (left < right)
		    {
		        int tmp = p[left];
		        p[left  ] = p[right];
		        p[right--] = tmp;
		    }
		}
		
		char* convertToTitle(int columnNumber)
		{
		    char* arr = (char*)malloc(sizeof(char) * 10);
		    int arrSize = 0;
		
		    //当columnNumber大于0,先减1,再模26,加上'A',得到的就是这个数字表示的名称的最低位的列名称
		    //如28表示为 AB ,28先减一得到27,27模26得1,1  'A'就得到'B'
		    //然后把得到的结果放到数组中,再将这个数字除以26,继续循环
		    while (columnNumber > 0)
		    {
		        columnNumber -= 1;
		        arr[arrSize  ] = columnNumber % 26   'A';
		        columnNumber /= 26;
		    }
		
		    //当columnNumber小于0
		    arr[arrSize] = '';
		
		    //因为是从后往前表示列的名称的,所以要逆置字符串;最后返回逆置后的字符串
		    reverse(arr, arrSize);
		    return arr;
		}

0 人点赞