Excel Sheet Column Title Leetcode Solution


Რთული ტური Easy
ხშირად ეკითხებიან Adobe Google
მათემატიკის პუნქტების სისტემა

პრობლემის განცხადება

ამ პრობლემაში მოცემულია პოზიტიური მთელი რიცხვი, რომელიც წარმოადგენს Excel ფურცლის სვეტის ნომერს, ჩვენ უნდა დავაბრუნოთ მისი შესაბამისი სვეტის სათაური, როგორც ეს მოცემულია Excel ფურცელში.

Excel Sheet Column Title Leetcode Solution

მაგალითი

#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" არის ერთი. ყველა char მიიღებს დამატებით.

იმისათვის, რომ მივიღოთ ბოლო სიმბოლო, ანუ Z, ჯერ მინუს 1 ანუ n– და შემდეგ n% 26
(n-1)% 26 = ზ
ახლა გაყოფა 26-ით და გაიმეორე იგივე პროცესი შემდეგი სიმბოლოსთვის.
(n-1) / 26 = (A + 1) * 26 ^ 1 + (B + 1) * 26 ^ 0

ალგორითმი

  1. შექმნათ ცარიელი სტრიქონი სიმბოლოების შესანახად.
  2. აწარმოეთ ციკლი, ხოლო n დადებითია.
    • გამოაკელით 1-ს n.
    • მიიღეთ ამჟამინდელი სიმბოლო n– ის მოდულის გაკეთებით 26 – ით.
    • N გაყოფა 26-ზე.
  3. ახლა შეცვალეთ შედეგების სტრიქონი, რადგან ჩვენ ვიპოვნეთ სიმბოლოები მარცხნიდან მარჯვნივ.
  4. დააბრუნეთ შებრუნებული სტრიქონი.

განხორციელება

C ++ პროგრამა Excel- ის ფურცლის სვეტის სათაურისთვის Leetcode Solution

#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 Solution

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 Solution

დროის სირთულე

O (ჟურნალი (n)): სადაც n არის მოცემული სვეტის ნომერი. ჩვენ თითოეულ განმეორებაში ვყოფთ რიცხვს 26-ზე, ამიტომ დროის სირთულე იქნება O (log (n)).

სივრცის სირთულე 

O (1): ჩვენ არ ვხმარობთ დამატებით ადგილს, გარდა შედეგის შენახვისა.