LeetCode 168 Excel表列名称

目录

题目​

解题思路

代码细节理解

C语言代码 


题目

 

 来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/excel-sheet-column-title
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

这是一道进制转换类型的题目。十进制转换为26进制使用除商逆序取余法。

资料:

C语言的进制转换以及算法实现_黑虎阿福的博客-CSDN博客_c语言进制转换算法

注意到当columnNumber=26*n时,取余remainder=0,但应该为26,才可转换为Z。

所以当remainder=0时,向上一位借一位(comlumnNumber-=26),使remainder=26即可。

代码细节理解

关于swap(ret,cnt)的问题:数组名称为数组第一个元素的地址,因此用数组名作为实参就可以将数组的起始地址传递给被调函数。所以当被调函数在函数体中修改数组元素时,真正修改的是存储在原存储单元中的数组元素。

 关于ret[cnt++] = remainder + 64:由于ret是字符型数组,可以用数字代码值来赋值。表示先给remainder+64,之后cnt++,指向下一位数组。

C语言代码 

void  swap(char* set, int len);
char* convertToTitle(int columnNumber) {
	char* ret = (char*)malloc(sizeof(char) * 8);
	int cnt = 0;   //数组下标
	while (columnNumber) {
		int remainder = columnNumber % 26;
		if (remainder == 0) {
			remainder = 26;
			columnNumber -= 26;
		}
		ret[cnt++] = remainder + 64;  //A的Ascii码为65。
		columnNumber /= 26;
	}
	ret[cnt] = '';    //最后一位结尾。
	swap(ret, cnt);     
	return ret;
}
void  swap(char* set,int len) {   //字符串反转
	int left = 0;
	int right = len - 1;
	while (left < right) {
		int temp = set[left];
		set[left] = set[right];
		set[right] = temp;
		left++;
		right--;
	}
}

最后,码字不易,看完记得点个赞和关注再走哦。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>