• Leetcode: 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 

    这道题是我微软onsite时遇到的一道题,没做过遇到这道题确实有点难一下子理得很清楚(我当时这道题应该做的不好,从most significant digit做,而且忘了n要-1)。这道题说白了其实就是十进制转换26进制,而且是从1开始的1十进制的转换

    短除法: Short Division

    本质是进制转换,将n转化为26进制,转化过程如下(括号里的是26进制数):

    1->(1)->A
    2->(2)->B
    ...
    26->(10)->Z
    27->(11)->AA
    28->(12)->AB
    .....
    52->(20)->AZ
    53->(21)->BA

    从least significant digit开始,不断地除以26取余数

    这是我的方法:因为A是1,而不是0,相当于26进制的数都整体减1,才能对应上从0开始的十进制数。

     1 public class Solution {
     2     public String convertToTitle(int n) {
     3         if (n <= 0) return "";
     4         StringBuffer res = new StringBuffer();
     5         while (n > 0) {
     6             res.insert(0, (char)('A' + (n-1)%26));
     7             n = (n-1) / 26;
     8         }
     9         return res.toString();
    10     }
    11 }

     这道题首先因为26个数字为一组,26次变一次,所以肯定是26进制,如果是1-26, 那么26号数字没法跟前面保持一致,比如都是一位25/26=0 而26/26=1. 所以应该回归0-based,1-26各数减一变成0-25,对应A到Z。但新的问题又出现了:AA本来是27,减了一之后是26, 26%26==0,最后一位是A没错,但是前一位26/26 == 1,又对应A,刚才0才对应A来着。所以,每一循环都要减一,以确保是0-based

    另一种做法:

     1 public String convertToTitle(int n) {
     2     if(n <= 0){
     3         throw new IllegalArgumentException("Input is not valid!");
     4     }
     5  
     6     StringBuilder sb = new StringBuilder();
     7  
     8     while(n > 0){
     9         n--;
    10         char ch = (char) (n % 26 + 'A');
    11         n /= 26;
    12         sb.append(ch);
    13     }
    14  
    15     sb.reverse();
    16     return sb.toString();
    17 }
  • 相关阅读:
    简单了解winform
    SqL语句基础之增删改查
    数据库之表
    数据库基本概念与操作
    搞死人不偿命的 Bank系统
    for的循环题
    .net framework 版本汇总
    LinqToEntity模糊查询的方法选择
    日常工作中的点滴:C# 根据字节长度截包含中文的字符串
    64位系统 IIS中应用程序池设置导致 访问数据库错误
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/4179867.html
Copyright © 2020-2023  润新知