ចំណងជើងសន្លឹកជួរឈរអេមភីអេសឡេឡេតកូដ


កម្រិតលំបាក មានភាពងាយស្រួល
សួរញឹកញាប់ កម្មវិធី Adob ​​e ក្រុមហ៊ុន google
គណិតវិទ្យា ប្រព័ន្ធលេខ

សេចក្តីថ្លែងការណ៍បញ្ហា។

នៅក្នុងបញ្ហានេះចំនួនគត់វិជ្ជមានត្រូវបានផ្តល់ដែលតំណាងឱ្យចំនួនជួរឈរនៃសន្លឹកអេសភីសយើងត្រូវប្រគល់ចំណងជើងជួរឈរដែលត្រូវគ្នារបស់វាដូចមាននៅក្នុងសន្លឹក Excel ។

ចំណងជើងសន្លឹកជួរឈរអេមភីអេសឡេឡេតកូដ

ឧទាហរណ៍

#1

28
"AB"

#2

701
"ZY"

វិធីសាស្រ្ត

បញ្ហានេះគឺជាការបញ្ច្រាសនៃបញ្ហាដែលយើងត្រូវដោះស្រាយ ស្វែងរកលេខជួរឈរពីចំណងជើងជួរឈរ។
ដូច្នេះក្នុងបញ្ហានោះយើងបានប្តូរលេខគោល ២៦ ទៅជាគោលលេខ ១០ ដែលជាលេខគោលដប់។ នៅក្នុងបញ្ហានេះយើងត្រូវរកចំណងជើងជួរឈរពីលេខជួរឈរ។ ដូច្នេះនៅទីនេះយើងត្រូវធ្វើផ្ទុយពីនេះពោលគឺយើងត្រូវបំប្លែងលេខគោល ១០ ទៅជាប្រព័ន្ធលេខ ២៦ ។

យើងដឹងនៅក្នុងប្រព័ន្ធលេខទូទៅនៃការសន្មតថាមូលដ្ឋាន -២៦ គួរតែមាន ២៦ តួអក្សរដែលតំណាងឱ្យតម្លៃពី ០ ដល់ ២៥។ ប៉ុន្តែនៅក្នុងចំណងជើងជួរឈរសន្លឹក Excel គឺខុសគ្នាបន្តិចបន្តួច។ វាតំណាងឱ្យតម្លៃពីលេខ ១ ដល់លេខ ២៦។ ដូច្នេះប្រសិនបើយើងប្រើតួអក្សរ AZ ជា ០ ដល់ ២៥ នោះវានឹងមើលទៅដូចជាសមីការខាងក្រោម៖

សូមឱ្យខ្សែអក្សរអេប៊ីអេ, នេះត្រូវគ្នានឹងលេខ n:
n = (A + 1) * ២៦ ^ ២ + (ខ + ១) * ២៦ ^ ១ + (Z + ១) * ២៦ ^ ០

ហេតុអ្វី (A + 1)? ដោយសារតែនៅក្នុងប្រព័ន្ធសាក 'A' គឺ ០ ប៉ុន្តែនៅក្នុងប្រព័ន្ធ Excel 'A' គឺមួយ។ រាល់ឆាតទទួលបានបន្ថែមមួយ។

ដូច្នេះដើម្បីទទួលបានការសាកចុងក្រោយមានន័យថា Z យើងនឹងដកលេខ ១ ពោលគឺ n– ហើយបន្ទាប់មកទទួលបាន n% 1
(n-1)% 26 = Z
ឥឡូវចែកជាមួយ ២៦ ហើយធ្វើបែបបទដដែលៗសម្រាប់តួអក្សរបន្ទាប់។
(n-1) / ២៦ = (A + ១) * ២៦ ^ ១ + (ខ + ១) * ២៦ ^ ០

ក្បួនដោះស្រាយ

  1. បង្កើតខ្សែអក្សរទទេសម្រាប់រក្សាទុកតួអក្សរ។
  2. ដំណើរការរង្វិលជុំខណៈពេលដែល n វិជ្ជមាន។
    • ដក 1 ពី n ។
    • ទទួលបានតួអក្សរបច្ចុប្បន្នដោយធ្វើម៉ូឌុលនៃ n ដោយ 26 ។
    • ចែក n ដោយ 26 ។
  3. ឥឡូវបញ្ច្រាសខ្សែលទ្ធផលពីព្រោះយើងបានរកឃើញតួអក្សរពីស្តាំទៅឆ្វេង។
  4. ត្រឡប់ខ្សែបញ្ច្រាស។

ការអនុវត្តន៍

កម្មវិធី C ++ សម្រាប់ជួរឈរសន្លឹក Excel 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

កម្មវិធីចាវ៉ាសម្រាប់មុខងារជួរឈរសន្លឹកអេមភីអេសឡេសកូដកូដ

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

ការវិភាគស្មុគស្មាញសម្រាប់ចំណងជើងជួរឈរសន្លឹកអេមភីអេសលេយកូដ

ស្មុគស្មាញពេលវេលា

O (log (n))៖ កន្លែងដែល n គឺជាលេខជួរឈរដែលបានផ្តល់។ យើងកំពុងបែងចែកលេខដោយ ២៦ នៅក្នុងការនិយាយឡើងវិញហេតុដូចនេះពេលវេលាស្មុគស្មាញនឹងត្រូវបាន O (log (n)) ។

ភាពស្មុគស្មាញនៃលំហ 

O (១)៖ យើងមិនប្រើកន្លែងទំនេរផ្សេងទៀតក្រៅពីរក្សាទុកលទ្ធផលទេ។