Excel թերթ սյունակի վերնագիր Leetcode լուծում


Դժվարության մակարդակ Հեշտ
Հաճախակի հարցնում են Adobe Google
Մաթեմատիկա Թվային համակարգ

Խնդիրի հայտարարություն

Այս խնդրում տրված է դրական ամբողջ թիվ, որը ներկայացնում է Excel թերթի սյունակի համարը, մենք պետք է վերադարձնենք դրա համապատասխան սյունակի անվանումը, ինչպես հայտնվում է Excel թերթում:

Excel թերթ սյունակի վերնագիր Leetcode լուծում

Օրինակ

#1

28
"AB"

#2

701
"ZY"

Մոտեցում

Այս խնդիրը խնդրի հակառակ կողմն է, որի մեջ մենք ստիպված ենք սյունակի համարը պարզիր սյունակի վերնագրից:
Այսպիսով, այդ խնդրում մենք բազային -26 թիվը վերածեցինք բազայի -10 համարի, որը տասնորդական թիվ է: Այս խնդրում մենք պետք է սյունակի համարից պարզենք սյունակի վերնագիրը: Այսպիսով, այստեղ մենք պարզապես պետք է հակառակն անենք, այսինքն `մենք պետք է բազային -10 (տասնորդական) թիվը փոխենք բազային -26 համակարգի մի շարք:

Մենք գիտենք, որ ենթադրենք, որ բազային-26-ի ընդհանուր թվային համակարգը պետք է ունենա 26 նիշ, որը ներկայացնում է 0-ից 25 արժեքներ: Այն ներկայացնում է 1-ից 26-ի արժեքները: Այսպիսով, եթե մենք AZ նիշերն օգտագործենք 0-25-ով, ապա այն նման կլինի ներքևի հավասարությունից.

Թող լարը լինի ABZ, սա համապատասխանում է n թվին.
n = (A + 1) * 26 ^ 2 + (B + 1) * 26 ^ 1 + (Z + 1) * 26 ^ 0

Ինչու (A + 1) Քանի որ char համակարգում «A» - ն 0 է, բայց Excel համակարգում «A» - ն մեկն է: Յուրաքանչյուր փայտանյութ ստանում է ևս մեկը:

Այսպիսով, որպեսզի ստանանք վերջին նշանը, այսինքն `Z- ը, նախ մինուս 1-ը, այսինքն` n-, ապա ստանում ենք n% 26
(n-1)% 26 =
Այժմ բաժանեք 26-ով և կրկնենք նույն գործընթացը հաջորդ նիշի համար:
(n-1) / 26 = (A + 1) * 26 ^ 1 + (B + 1) * 26 ^ 0

Ալգորիթմ

  1. Ստեղծեք դատարկ տող նիշերը պահելու համար:
  2. Գործարկել մի օղակ, մինչ n դրական է:
    • N- ից հանել 1-ը:
    • Ստացեք ընթացիկ նիշ ՝ կատարելով n- ի 26 – ի մոդուլը:
    • N- ը բաժանել 26-ի:
  3. Այժմ հակադարձեք արդյունքի տողը, քանի որ մենք գտել ենք աջից ձախ նիշեր:
  4. Վերադարձեք հակառակ տողը:

Իրականացման

C ++ ծրագիր Excel թերթի սյունակի վերնագրի համար Leetcode լուծման համար

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

string convertToTitle(int n) 
{        
    string ans;
    while(n>0)
    {
        --n;
        int d= n%26;
        n/=26;
        ans+= 'A'+d;            
    }
   reverse(ans.begin(),ans.end());
   return ans; 
}

int main() 
{
   cout<<convertToTitle(28) <<endl;
   return 0; 
}
AB

Java ծրագիր Excel թերթի սյունակի վերնագրի համար Leetcode լուծման համար

class Rextester{
    
    public static String convertToTitle(int n) 
    {
        StringBuilder ans= new StringBuilder();
        while(n>0)
        {
            --n;
            int d= n%26;
            n/=26;
            ans.append((char)('A'+d));            
        }
        ans.reverse();
        return ans.toString(); 
    }
    
    public static void main(String args[])
    {    	
       System.out.println( convertToTitle(28)  ) ;
    }
}
AB

Բարդության վերլուծություն Excel թերթի սյունակի վերնագրի համար Leetcode լուծման համար

Timeամանակի բարդություն

O (տեղեկամատյան (n)): Որտեղ n տրված սյունակի համարն է: Յուրաքանչյուր կրկնության մեջ մենք թիվը բաժանում ենք 26-ի, հետևաբար ժամանակի բարդությունը կլինի O (տեղեկամատյան (n)):

Տիեզերական բարդություն 

O (1): Արդյունքը պահելու համար մենք ոչ մի լրացուցիչ տարածք չենք օգտագործում: