算法题:如何从列标题中查找Excel列号?

2021年3月30日10:18:53 发表评论 941 次浏览

本文概述

我们已经讨论过从列号转换为Excel列名。在这篇文章中, 讨论了反向。

给定列标题(如Excel工作表中所示), 返回其对应的列号。

column  column number
  A  ->  1
  B  ->  2
  C  ->  3
  ...
  Z  ->  26
  AA ->  27
  AB ->  28

例子:

Input: A
Output: 1
A is the first column so the output is 1.

Input: AA
Output: 27
The columns are in order A, B, ..., Y, Z, AA ..
So, there are 26 columns after which AA comes.

方法:

该过程类似于二进制到十进制的转换。

例如, 要转换AB, 公式为26 * 1 + 2。

再举一个例子

To convert CDA, 3*26*26 + 4*26 + 1
= 26(3*26 + 4) + 1
= 26(0*26 + 3*26 + 4) + 1

因此, 这非常类似于将二进制数转换为十进制(将基数保持为26)。

将输入作为字符串, 然后从左到右遍历输入字符串, 并计算结果, 如下所示:

result = 26*result + s[i] - 'A' + 1

.

结果将是

结果&= \ sum_ {i = 0} ^ {n} a [n-i-1] *(26 ^ {(n-i-1)})

.

C ++

// C++ program to return title to result
// of excel sheet.
#include <bits/stdc++.h>
  
using namespace std;
  
// Returns resul when we pass title.
int titleToNumber(string s)
{
     // This process is similar to 
     // binary-to-decimal conversion
     int result = 0;
     for ( const auto & c : s)
     {
         result *= 26;
         result += c  - 'A' + 1;
     }
  
     return result;
}
  
// Driver function
int main()
{
     cout << titleToNumber( "CDA" ) << endl;
     return 0;
}

Java

// Java program to return title 
// to result of excel sheet.
import java.util.*;
import java.lang.*;
  
class GFG
{
  
// Returns resul when we pass title.
static int titleToNumber(String s)
{
     // This process is similar to 
     // binary-to-decimal conversion
     int result = 0 ;
     for ( int i = 0 ; i < s.length(); i++)
     {
         result *= 26 ;
         result += s.charAt(i) - 'A' + 1 ;
     }
     return result;
}
      
// Driver Code
public static void main (String[] args) 
{
     System.out.print(titleToNumber( "CDA" ));
}
}
  
// This code is contributed 
// by Akanksha Rai(Abby_akku)

Python3

# Python program to return title to result 
# of excel sheet. 
  
# Returns resul when we pass title. 
def titleToNumber(s):
     # This process is similar to binary-to- 
     # decimal conversion 
     result = 0 ; 
     for B in range ( len (s)): 
         result * = 26 ; 
         result + = ord (s[B]) - ord ( 'A' ) + 1 ; 
  
     return result; 
  
# Driver function 
print (titleToNumber( "CDA" )); 
  
# This code contributed by Rajput-Ji

C#

// C# program to return title 
// to result of excel sheet. 
using System;
  
class GFG
{
  
// Returns resul when we pass title. 
public static int titleToNumber( string s)
{
     // This process is similar to 
     // binary-to-decimal conversion 
     int result = 0;
     for ( int i = 0; i < s.Length; i++)
     {
         result *= 26;
         result += s[i] - 'A' + 1;
     }
     return result;
}
  
// Driver Code 
public static void Main( string [] args)
{
     Console.Write(titleToNumber( "CDA" ));
}
}
  
// This code is contributed by Shrikant13

输出如下:

2133

复杂度分析:

  • 时间复杂度:O(n), 其中n是输入字符串的长度。
  • 空间复杂度:O(1)。
    由于不需要额外的空间。

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: