首页 > 学院 > 开发设计 > 正文

leecode 解题总结:168. Excel Sheet Column Title

2019-11-08 01:24:46
字体:
来源:转载
供稿:网友
#include <iostream>#include <stdio.h>#include <vector>#include <string>#include <sstream>using namespace std;/*问题:Given a positive integer, return its corresponding column title as appear in an Excel sheet.For example:    1 -> A    2 -> B    3 -> C    ...    26 -> Z    27 -> AA    28 -> AB 	...	51->  AY	52->  AZ	53->  BA	...	26^25+26      YZ	26^26 + 1       ZA	26^26+26^1  ZZ分析:给定了整数,1~26对应A到Z,从27开始把A放在前面重复,其实相当于27进位制。二进制和十进制分别逢2进1,逢10进1,这里是逢27进1,所以是27进位制。不对这里和27进位制不同,超过27,个位需要设置为A所以52应该=26^1+26=AZ所有的数拆分成26^n次方即可难点先要确认:26^n*Kn +... + 26^2*K2 + 26*K1 + K0其中Ki属于[1,26]分别用[A,Z]表示。之前求十进制转化为二进制采用的是除2取余19 除2 得9,余19 除2 得4,余14 除2 得2, 余02 除2 得1, 余01 除2 得0 , 余1得到: 1 0 0 1 1(最后逆置即可)26进制,每次除以26,得到余数,将余数依次存储,然后逆置。如果中间遇到0,比如26^1 = Z26^2 + 1 = 677 = B?A26^2 = 676 = 26^1 + B??26^26 = Z?要确定好系数。逢Z+1变成A,前一位自动累加,当前位变成A凡是遇到总结输入:12627515253676输出:AZAAAYAZBAYZ关键:1 leecode解法:https://leetcode.com/PRoblems/excel-sheet-column-title/?tab=Solutionsn--后,每次除以26的余数作为结果,然后n=n/26,其实就是求得余数这里之所以要先n--,就是为了解决类似26^2,26^1这种不知道如何表示的情况*/class Solution {public:    string convertToTitle(int n) {        stringstream stream;		char value;		while(n > 0)		{			n--;			value = 'A' + (n % 26);			stream << value;			n /= 26;		}		//需要逆置		string result = stream.str();		reverse(result.begin() , result.end());		return result;    }};void print(vector<int>& result){	if(result.empty())	{		cout << "no result" << endl;		return;	}	int size = result.size();	for(int i = 0 ; i < size ; i++)	{		cout << result.at(i) << " " ;	}	cout << endl;}void process(){	 vector<int> nums;	 int value;	 int num;	 Solution solution;	 vector<int> result;	 while(cin >> num )	 {		 string myNum = solution.convertToTitle(num);		 cout << myNum << endl;	 }}int main(int argc , char* argv[]){	process();	getchar();	return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表