সহস্র পৃথককারী লেটকোড সমাধান


কাঠিন্য মাত্রা সহজ
স্ট্রিং

সমস্যা বিবৃতি

এই সমস্যায় আমাদের একটি নে-নেতিবাচক পূর্ণসংখ্যা দেওয়া হয়। আমাদের পূর্ণসংখ্যাকে এমন বিন্যাসে রূপান্তর করতে হবে, যাতে কিছু বিন্দু থাকবে যা সমস্ত হাজারকে পৃথক করে, অর্থাৎ ডান থেকে প্রতিটি 3 টির পরে বিন্দু রয়েছে।

উদাহরণ

#1

n = 987
"987"

#2

n = 123456789
"123.456.789"

ব্যাখ্যা:

সংখ্যাটি 123456789। ডানদিক থেকে ডান দিক থেকে 3 স্থান হবে। সুতরাং, ডান থেকে দেখতে, আমরা 9,8 এবং 7 পিছনে রেখে 6 এবং 7 এর মধ্যে একটি বিন্দু রাখব Then,6,5 এবং 4 পিছনে রেখে, আমরা 3 এবং 4 এর মধ্যে একটি বিন্দু রাখব।
এখন 3,2 এবং 1 টি পিছনে রেখে, কেবলমাত্র বাম দিকে আরও সংখ্যা থাকবে বলে আমরা কেবল একটি বিন্দু রাখব। প্রশ্ন অনুসারে দুটি সংখ্যার মধ্যে হওয়া উচিত।
এইভাবে আমরা কোনও বিন্দু রাখব না।

অভিগমন

প্রথমত, আমরা সংখ্যাকে স্ট্রিংয়ে রূপান্তর করি (চলুন str)। তারপরে আমরা ডান দিক থেকে স্ট্রিংয়ের পথটি অনুসরণ করছি। আমরা এর জন্য একটি লুপ ব্যবহার করছি। প্রতিটি লুপে আমরা এর বিন্দুর পরে তার তিনটি সংখ্যা সন্নিবেশ করছি by
তবে প্রতিটি অঙ্কের সন্নিবেশের পরে, আমরা পরীক্ষা করব যে আমরা স্ট্রিংয়ের বাম দিকের সীমানা থেকে পৌঁছেছি কিনা। যদি হ্যাঁ, তবে আমরা লুপটি ভেঙে দেব। অন্যথায়, আমরা 3 টি সংখ্যা এবং তারপরে 1 ডট সন্নিবেশ করিয়ে দেব।

মনে রাখবেন যে কোনও ডট সন্নিবেশ করানোর জন্য তৃতীয় চেকিং গুরুত্বপূর্ণ, যা 3 বা 123 বা 123.456 এর মতো দৃশ্যে ব্যবহৃত হবে যেখানে বামতম অঙ্কের আগে আমাদের কোনও ডট toোকানোর দরকার নেই।
কারণ আমরা ডান থেকে বামে অক্ষরগুলি সন্নিবেশ করছিলাম সুতরাং চূড়ান্ত উত্তর পেতে আমাদের তৈরি স্ট্রিংটি বিপরীত হওয়া দরকার। সুতরাং, বিপরীত পরে স্ট্রিং, দাও.

সহস্র পৃথককারী লেটকোড সমাধান

বাস্তবায়ন

হাজার + বিভাজক লেটকোড সমাধানের জন্য সি ++ প্রোগ্রাম

#include <bits/stdc++.h> 
using namespace std;
string thousandSeparator(int n) {
    string str=to_string(n);
    stringstream ss;
    for(int i=str.length()-1;i>=0;){
        ss<<str[i];//inserting 1st digit
        i--;
        if(i==-1)break;//checking if we are out of left bound
        ss<<str[i];//inserting 2nd digit
        i--;
        if(i==-1)break;//checking if we are out of left bound
        ss<<str[i];//inserting 3rd digit
        i--;
        if(i==-1)break;//checking if we are out of left bound
        ss<<".";//after 3 digits insertion, finally inserting a dot "."
    }
    str= ss.str();
    reverse(str.begin(),str.end());//reversing the final string
    return str;
}

int main()
{
    cout << thousandSeparator(123456789);
}
123.456.789

হাজার বিভাজক লেটকোড সমাধানের জন্য জাভা প্রোগ্রাম

import java.util.*;
import java.lang.*;

class Solution
{  
    public static  String thousandSeparator(int n) 
    {
        String str=n+"";
        StringBuilder sb=new StringBuilder();
        for(int i=str.length()-1;i>=0;){
            sb.append(str.charAt(i));//inserting 1st digit
            i--;
            if(i==-1)break;//checking if we are out of left bound
            sb.append(str.charAt(i));//inserting 2nd digit
            i--;
            if(i==-1)break;//checking if we are out of left bound
            sb.append(str.charAt(i));//inserting 3rd digit
            i--;
            if(i==-1)break;//checking if we are out of left bound
            sb.append(".");//after 3 digits insertion, finally inserting a dot "."
        }
        return sb.reverse().toString();//reverse and return the final string
    }
    
    public static void main(String args[])
    {
        System.out.println(thousandSeparator(123456789));
    }
}
123.456.789

হাজার বিভাজক লেটকোড সমাধানের জন্য জটিলতা বিশ্লেষণ

সময় জটিলতা

ও (লেন): আমরা প্রদত্ত সংখ্যাটি ডান অঙ্ক থেকে বাম দিকে ট্র্যাশ করে চলেছি সুতরাং সময় জটিলতা হবে ও (লেন) যেখানে লেন প্রদত্ত সংখ্যার অঙ্কের সংখ্যা।

স্পেস জটিলতা ity 

ও (লেন): আমরা জাভাতে স্ট্রিংবিল্ডার ব্যবহার করেছি এবং সি ++ তে স্ট্রিংস্ট্রিম ব্যবহার করেছি ফলে অতিরিক্ত স্থান ব্যবহার করে স্থান জটিলতা ও (লেন) হয়ে যায়।