Решение за лек-код со наслов на колоната на Excel


Ниво на тешкотија Лесно
Често прашувано во Adobe Google
Математика Број систем

Изјава за проблем

Во овој проблем е даден позитивен цел број кој претставува број на колона на Excel-лист, ние мора да го вратиме неговиот соодветен наслов на колоната како што се појавува во Excel-листот.

Решение за лек-код со наслов на колоната на Excel

пример

#1

28
"AB"

#2

701
"ZY"

Пристап

Овој проблем е обратен на проблемот во кој мораме дознајте го бројот на колоната од насловот на колоната.
Значи, во тој проблем ние конвертиравме број на база-26 во број на база-10 што е децимален број. Во овој проблем треба да го откриеме насловот на колоната од бројот на колоната. Значи, тука треба да сториме спротивно, односно мораме да претвориме база-10 (децимален) број во број на систем на база-26.

Знаеме генерално, системот за броеви претпоставуваме дека основата-26 треба да има 26 карактери што претставува вредности од 0 до 25. Но, во насловот на колоната на листот Excel ова е малку поразлично. Претставува вредности од 1 до 26. Значи, ако користиме знаци AZ како 0-25, тогаш тоа ќе изгледа како подолу во равенката:

Нека низата е ABZ, ова одговара на бројот n:
n = (A + 1) * 26 ^ 2 + (B + 1) * 26 ^ 1 + (Z + 1) * 26 ^ 0

Зошто (А + 1)? Бидејќи во системот char, 'A' е 0, но во ексел системот 'A' е едно. Секој јаглен добие дополнителен.

Значи, со цел да го добиеме последниот знак, т.е. 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 Резултат за лек-код

#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

Јава програма за Наслов на колоната на листот Excel Линк код решение

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

Временска комплексност

О (дневник (н)): Каде што n е дадениот број на колоната. Ние го делиме бројот со 26 во секоја повторување, па оттука и сложеноста на времето ќе биде O (log (n)).

Комплексноста на просторот 

О (1): Ние не користиме дополнителен простор освен за зачувување на резултатот.