LeetCode 168. Excel Sheet Column Title 解题报告

来源:互联网 发布:iphone的照片传到mac 编辑:程序博客网 时间:2024/06/14 06:33

题目描述:

168. Excel Sheet Column Title

 
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 

解题思路:

面对这道题时,第一次的想法相对比较简单,就是在“A”的基础上逐渐累加,然后得到结果。(如代码1)但是这种方法效率极低,在n特别大的时候会超时。发现效率太低之后,我尝试使用计算方法,而不是逐个累加。首先令tag标记为26,如果26*27>=n>26,则结果中字符串长度即为2,以后的情况类似。

通过这种方法首先确定了结果中字符串的长度,之后再将tag逐渐递减,对应相应字符的变化,当n等于0时即得到结果。(正确解法见代码2)



代码展示:

<pre name="code" class="cpp">class Solution {public://代码一// Time Limit Exceedstring convertToTitle(int n) {        string ans ="A";        int ssize = ans.size();        for(int i=1;i<n;i++)        {            int t = ssize-1;            while(ans[t]=='Z')            {                t--;            }            if(t==-1)            {                for(int i=0;i<ans.size();i++)                {                    ans[i]='A';                }                ans = 'A'+ans;                ssize+=1;                            }            else            {                ans[t]=char(ans[t]+1);                for(int i=t+1;i<ssize;i++)                ans[i]='A';                            }            //cout<<ans<<endl;        }        return ans;}};


<pre name="code" class="cpp">class Solution {public://代码二//acceptedstring convertToTitle(int n) {        long long tag =26;        string ans ="A";        while(n-tag>0)        {            n-=tag;            tag*=26;            ans+="A";        }        int num_pow =1;        while(n>0)        {        while(n-tag/pow(26,num_pow)>0)        {        ans[num_pow-1]=char(ans[num_pow-1]+1);        n-=tag/pow(26,num_pow);        //cout<<n<<"  "<<ans<<endl;}num_pow++;}        return ans;}};


                                             
0 0
原创粉丝点击