Excelシートの列番号Leetcodeソリューション


難易度 簡単に
よく聞かれる マイクロソフト
数学 番号システム

問題文

この問題では、Excelシートに表示される列タイトルが与えられます。次に示すように、Excelでその列タイトルに対応する列番号を返す必要があります。

Excelシートの列番号Leetcodeソリューション

#1

"AB"
28

#2

"ZY"
701

アプローチ

特定の列タイトルの列番号を見つけるには、次のように考えることができます。 ある記数法から別の記数法への変換。
0進数と同様に、9進数で任意の数値を表す26〜26の文字があります。 同様に、列のタイトルでは、文字はAからZまでで、任意の数を表します。 各場所に合計XNUMX個のシンボルがあるため、ベースがXNUMXであるシステムの数を考えることができます。

今、質問は非常に簡単になります。 XNUMX進数またはXNUMX進数をXNUMX進数に変換するのと同様に、このタイトル文字列をXNUMX進数に変換する必要があります。

たとえば、文字列「1337」のXNUMX進値を検索する場合、次のように文字列を左から右にトラバースすることで、数値を繰り返し検索できます。
'1' = 1
'13' =(1 x 10)+ 3 = 13
'133' =(13 x 10)+ 3 = 133
'1337' =(133 x 10)+ 7 = 1337

基数26の記数法を扱っているので、この問題になります。 同じ考えに基づいて、10を26に置き換えて、アルファベットを数字に変換することができます。

タイトル「LEET」の場合:

L = 12
E =(12 x 26)+ 5 = 317
E =(317 x 26)+ 5 = 8247
T =(8247 x 26)+ 20 = 214442

製品の導入

Excelシートの列番号Leetcodeソリューション用のC ++プログラム

#include <bits/stdc++.h>
using namespace std;

int titleToNumber(string s)
{        
        int ans=0;        
        for(auto c:s)
        {
          ans= ans*26 + (c-'A'+1);    
        }
    
        return ans;
}

int main() 
{

   cout<<titleToNumber("AB") <<endl;

   return 0; 
}
28

Excelシートの列番号Leetcodeソリューション用のJavaプログラム

class Rextester{
    
  public static int titleToNumber(String s) 
    {             
        int ans=0;
        for(char c:s.toCharArray())
        {
          ans= ans*26 + (c-'A'+1);    
        }
        
        return ans;
    }
    
  public static void main(String args[])
    {
       	
    System.out.println( titleToNumber("AB") ) ;
    }
}
28

Excelシートの列番号Leetcodeソリューションの複雑さの分析

時間の複雑さ

オン) : ここで、Nは入力文字列の合計文字数です。 文字に沿ってXNUMX回繰り返したため、時間計算量はO(N)になります。

スペースの複雑さ 

O(1): 結果を格納するためにXNUMXつの整数変数を使用しました。