천 분리기 Leetcode 솔루션


난이도 쉽게

문제 정책

이 문제에서는 음이 아닌 정수가 주어집니다. 이러한 형식으로 정수를 변환해야합니다. 여기에는 수천 개를 모두 구분하는 점이 있습니다. 즉, 오른쪽에서 각 3 자리 뒤에 점이 있습니다.

#1

n = 987
"987"

#2

n = 123456789
"123.456.789"

설명 :

숫자는 123456789입니다. 맨 오른쪽 점은 오른쪽에서 3 자리입니다. 그래서 오른쪽에서 보면 9,8은 남겨두고 7과 6 사이에 점을 넣을 것입니다. 그리고 7와 6,5를 뒤에두고 4과 3 사이에 점을 넣을 것입니다.
이제 3,2 및 1을 남겨두고 왼쪽에 더 많은 숫자가있는 경우에만 점을 배치합니다. 질문에 따라 두 숫자 사이 여야합니다.
따라서 우리는 어떤 점도 배치하지 않을 것입니다.

접근

먼저 숫자를 문자열로 변환합니다 (let str). 그런 다음 오른쪽에서 문자열 str을 순회합니다. 이를 위해 for 루프를 사용하고 있습니다. 각 루프에서 세 자리 숫자와 점을 삽입합니다.
그러나 각 숫자 삽입 후 str의 왼쪽 경계를 벗어 났는지 확인합니다. 그렇다면 루프를 끊을 것입니다. 그렇지 않으면 3 자리 숫자와 1 개의 점을 계속 삽입합니다.

점을 삽입하기위한 세 번째 검사는 중요한 점이며, 가장 왼쪽 숫자 앞에 점을 삽입 할 필요가없는 3 또는 123 또는 123.456와 같은 시나리오에서 사용됩니다.
오른쪽에서 왼쪽으로 문자를 삽입하므로 최종 답을 얻으려면 생성 된 문자열을 반대로해야합니다. 따라서 반전 후 , 반환.

천 분리기 Leetcode 솔루션

실시

Thousand Separator Leetcode 솔루션을위한 C ++ 프로그램

#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

Thousand Separator Leetcode 솔루션을위한 Java 프로그램

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

수천 개의 분리기 Leetcode 솔루션에 대한 복잡성 분석

시간 복잡성

O (렌) : 주어진 숫자를 오른쪽에서 왼쪽으로 이동하므로 시간 복잡성은 O (len)이됩니다. 여기서 len은 주어진 숫자의 자릿수입니다.

공간 복잡성 

O (렌) : 우리는 자바에서 stringbuilder를 사용하고 C ++에서 stringstream을 사용 했으므로 추가 공간을 사용하면 공간 복잡성이 O (len)됩니다.