【问题标题】:How to get Excel column title? [duplicate]如何获取 Excel 列标题? [复制]
【发布时间】:2017-01-23 14:01:00
【问题描述】:

我尝试解决代码大战中的一些任务。我必须创建方法,它返回列标题(发生在 Excel 中)。该方法有一个参数,它是数字。例如:

def get_column_title(n)
//code
end

如果 n = 1。它应该返回 A。

测试用例:

Test.assert_equals(get_column_title(1), "A")
Test.assert_equals(get_column_title(26), "Z")
Test.assert_equals(get_column_title(52), "AZ")
Test.assert_equals(get_column_title(53), "BA")
Test.assert_equals(get_column_title(702), "ZZ")

我有什么:

  def number_values
    {
      1 => 'A', 2 => 'B', 3 => 'C', 4 => 'D', 5 => 'E', 6 => 'F', 7 => 'G',
      8 => 'H', 9 => 'I', 10 => 'J', 11 => 'K', 12 => 'L', 13 => 'M', 14 => 'N',
      15 => 'O', 16 => 'P', 17 => 'Q', 18 => 'R', 19 => 'S', 20 => 'T',
      21 => 'U', 22 => 'V', 23 => 'W', 24 => 'X', 25 => 'Y', 26 => 'Z'
    }
  end

def translate_values
    if @n <= 26
      number_values[@n-26*0]
    elsif @n <= 52
        'A'+ number_values[@n-26*1]
    elsif @n <= 78
        'B' + number_values[@n-26*2]
    end
end

问题: 我不知道如何通过算法解决此任务。我想过在一个循环中将这个数字除以 26。 你能给我一些提示如何完成这项任务吗?

运动来源: codewars.com

【问题讨论】:

标签: ruby algorithm


【解决方案1】:

您必须将您的号码转换为 Base 26 并使用 A...Z 而不是 0...25。唯一的技巧是在每一步中从你的数字中减去一个。

【讨论】:

    【解决方案2】:
    {alphabetCount=26
    alphabetOffset=1
    
    for i in 0 .. 1000
        i = i + alphabetOffset
        category=""
    
        while i>alphabetCount do
            j=i%alphabetCount
    
            if j==0 then
                j=alphabetCount
            end
    
            category=(64+j).chr + category
            i=(i-j)/alphabetCount
    
            if j==0 then
                i=i-1
             end
        end
    
        category=(64+i).chr + category + "\n"
        puts category
    end}
    

    对不起,如果它有点不稳定,但我在移动设备上,只能通过在线编译器进行测试:( 但它输出

    0=A
    ...
    25=Z
    ....
    702=AAA
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-05
      • 2021-11-21
      • 2012-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多