力扣-168-Excel 表列名称

发布时间 2023-10-17 15:16:24作者: YaosGHC

华硕科技的面试手写算法题,我没见过,分析出了思路但是没把握写出来能过,于是挂了

	string convertToTitle(int columnNumber) {
		// 计算会有几位长度
		long long temp = 26;
		int len = 1;
		while (columnNumber > temp) {
			len++;
			temp *= 27;
		}
		// 计算每一位上的具体符号
		// 从高位向低位计算,比如BS,先计算B,就是在不大于num的情况下,可以被多少个26整除,这里用取模运算,剩下的小于26的余数直接转换为字母
		// 如果是 BDS ,同样先计算高位可以被多少个26*26整除(也就是len-1个26的幂),然后是可以被多少个len-2的26幂整除,一直到一个小于26的整数
		// 这里最好是单独抽出一个print函数用于打印26以内的数字向字母的转换,当然也可以利用ASC码
		string res;
		for (int i = len; i > 0; --i) {
			int site = columnNumber / pow(26, i-1);
			columnNumber -= pow(26, i-1)*site;
			res += (char)site + 64;
		}
		return res;
	}

这是我的代码,但是我无法解决 52 的用例 52 对应的是 AZ