راه حل کد کد عنوان ستون اکسل


سطح دشواری ساده
اغلب در خشت گوگل
ریاضی سیستم شماره

بیان مسأله

در این مسئله یک عدد صحیح مثبت ارائه شده است که نشان دهنده شماره ستون یک صفحه اکسل است ، ما باید عنوان ستون مربوطه را همانطور که در یک صفحه اکسل نشان داده شده است ، برگردانیم.

راه حل کد کد عنوان ستون اکسل

مثال

#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 است ، اما در سیستم اکسل 'A' یک است. هر کاراکتر یک مورد اضافی دریافت کنید.

بنابراین برای بدست آوردن آخرین کاراکتر یعنی Z ابتدا منهای 1 یعنی n– و سپس n٪ 26 بدست می آوریم
(n-1)٪ 26 = Z
حالا با 26 تقسیم کنید و همین کار را برای کاراکتر بعدی تکرار کنید.
(n-1) / 26 = (A + 1) * 26 ^ 1 + (B + 1) * 26 ^ 0

الگوریتم

  1. یک رشته خالی برای ذخیره شخصیت ها ایجاد کنید.
  2. حلقه را اجرا کنید در حالی که n مثبت است.
    • 1 را از n کم کنید.
    • با انجام مدول n در 26 کاراکتر فعلی را بدست آورید.
    • n را بر 26 تقسیم کنید.
  3. اکنون رشته نتیجه را معکوس کنید زیرا شخصیت هایی را از راست به چپ پیدا کرده ایم.
  4. رشته معکوس را برگردانید.

پیاده سازی

برنامه C ++ برای عنوان ستون ورق اکسل راه حل کد

#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

برنامه جاوا برای ستون ورق اکسل عنوان 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

تجزیه و تحلیل پیچیدگی برای عنوان صفحه ستون عنوان برگه راه حل کد

پیچیدگی زمان

O (log (n)): که n شماره ستون داده شده است. ما در هر تکرار عدد را بر 26 تقسیم می کنیم ، از این رو پیچیدگی زمان O خواهد بود (log (n)).

پیچیدگی فضا 

O (1): ما از هیچ فضای اضافی به غیر از ذخیره نتیجه استفاده نمی کنیم.