LeetCode-168. Excel Sheet Column Title

本文介绍了一种将整数转换为Excel列标题的方法,并通过两种不同的实现方式进行了详细解析。第一种方法采用逐位累加的方式,但遇到大数值时效率较低;第二种方法则通过数学运算实现了高效转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很简单的一道题,不过实际上是转换进制,从10进制转换成27进制(实际上这也不能算一种进制,因为不能表达0),我感觉有记录的意义。


168.

Excel Sheet Column Title

Total Accepted: 90306
Total Submissions: 365463
Difficulty: Easy
Contributors: Admin
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 

一开始的思路就是一位一位数往上加,最后在算总账。

public class Solution {
    public String convertToTitle(int n) {

        String str="";
        int singleDigit=0;
        int tensDigit=0;
        int hundredsDigit=0;
        int thousandsDigit=0;

        for(int i=0;i<n;i++){
            singleDigit++;

            if(singleDigit>=27){
                singleDigit%=26;
                tensDigit++;
            }
            if(tensDigit>=27){
                tensDigit%=26;
                hundredsDigit++;
            }
            if(hundredsDigit>=27){
                hundredsDigit%=26;
                thousandsDigit++;
            }


        }
        str+=getLetterFromNumber(thousandsDigit);
        str+=getLetterFromNumber(hundredsDigit);
        str+=getLetterFromNumber(tensDigit);
        str+=getLetterFromNumber(singleDigit);
        return str;
    }

    private static String getLetterFromNumber(int num){

        switch(num){
            case 1:
                return "A";
            case 2:
                return "B";
            case 3:
                return "C";
            case 4:
                return "D";
            case 5:
                return "E";
            case 6:
                return "F";
            case 7:
                return "G";
            case 8:
                return "H";
            case 9:
                return "I";
            case 10:
                return "J";
            case 11:
                return "K";
            case 12:
                return "L";
            case 13:
                return "M";
            case 14:
                return "N";
            case 15:
                return "O";
            case 16:
                return "P";
            case 17:
                return "Q";
            case 18:
                return "R";
            case 19:
                return "S";
            case 20:
                return "T";
            case 21:
                return "U";
            case 22:
                return "V";
            case 23:
                return "W";
            case 24:
                return "X";
            case 25:
                return "Y";
            case 26:
                return "Z";
            default:
                return "";
        }
    }  
}

前面的case都没问题,所以正确性应该是ok的。
结果后面有个test case

Last executed input:
1000000001

TLE了,所以只能乖乖用算出来了。这道题估计本意就是这样,所以时间卡的紧。毕竟这是个o(N)的方法,不应该TLE的。

做出来了。不过这个有个坑,因为前面1是等于A的,但是后面进制转换以后A实际上是充当了0,所以当Z的时候虽然用十进制来看前一位进了1但是实际上并没有进1,所以前一位要减一。

public class Solution {
    public String convertToTitle(int n) {

        String str="";
        int ans=n;

        do{
            if(ans>26){
                if(ans%26==0){
                    str+=getLetterFromNumber(ans%26);
                    ans/=26;
                    ans--;
                }else{
                    str+=getLetterFromNumber(ans%26);
                    ans/=26;
                }


            }else{
                str+=getLetterFromNumber(ans); 
                break;
            }



        }while(ans>0);

        return reverseString(str);
    }
    private static String reverseString(String str){
        char[] arr=str.toCharArray();
        String tmp="";
        for(int i=arr.length-1;i>=0;i--){
            tmp+=arr[i];
        }
        return tmp;
    }

    private static String getLetterFromNumber(int num){

        switch(num){
            case 1:
                return "A";
            case 2:
                return "B";
            case 3:
                return "C";
            case 4:
                return "D";
            case 5:
                return "E";
            case 6:
                return "F";
            case 7:
                return "G";
            case 8:
                return "H";
            case 9:
                return "I";
            case 10:
                return "J";
            case 11:
                return "K";
            case 12:
                return "L";
            case 13:
                return "M";
            case 14:
                return "N";
            case 15:
                return "O";
            case 16:
                return "P";
            case 17:
                return "Q";
            case 18:
                return "R";
            case 19:
                return "S";
            case 20:
                return "T";
            case 21:
                return "U";
            case 22:
                return "V";
            case 23:
                return "W";
            case 24:
                return "X";
            case 25:
                return "Y";
            case 26:
                return "Z";
            case 0:
                return "Z";
            default:
                return "";
        }


    }


}
资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值