ພັນ Seetrator Leetcode Solution


ລະດັບຄວາມຫຍຸ້ງຍາກ Easy
string

ຖະແຫຼງການບັນຫາ

ໃນບັນຫານີ້, ພວກເຮົາໄດ້ຖືກມອບໃຫ້ເປັນເລກເຕັມທີ່ບໍ່ແມ່ນລົບ. ພວກເຮົາຕ້ອງປ່ຽນເລກເຕັມໃນຮູບແບບດັ່ງກ່າວ, ໃນນັ້ນຈະມີຈຸດໆບາງຢ່າງທີ່ແຍກອອກເປັນພັນໆ, ເຊັ່ນວ່າມີຈຸດໆຫລັງຈາກແຕ່ລະ 3 ບ່ອນຈາກຂວາ.

ຍົກຕົວຢ່າງ

#1

n = 987
"987"

#2

n = 123456789
"123.456.789"

ຄໍາອະທິບາຍ:

ເບີໂທແມ່ນ 123456789. ຈຸດທີ່ຖືກຕ້ອງທີ່ສຸດແມ່ນຢູ່ 3 ບ່ອນຈາກຂວາ. ດັ່ງນັ້ນ, ຈາກການເບິ່ງຈາກດ້ານຂວາ, ພວກເຮົາຈະປະໄວ້ 9,8 ແລະ 7 ຢູ່ຫລັງແລະວາງຈຸດລະຫວ່າງ 6 ແລະ 7. ຈາກນັ້ນຫລັງຈາກປະໄວ້ 6,5 ແລະ 4 ຢູ່ທາງຫລັງ, ພວກເຮົາຈະວາງຈຸດຢູ່ລະຫວ່າງ 3 ແລະ 4.
ດຽວນີ້ປ່ອຍໃຫ້ 3,2 ແລະ 1 ຢູ່ທາງຫລັງ, ພວກເຮົາຈະວາງຈຸດຖ້າວ່າຈະມີໂຕເລກຢູ່ທາງຊ້າຍເພາະວ່າ ຄວນຈະຢູ່ລະຫວ່າງສອງຕົວເລກຕາມ ຄຳ ຖາມ.
ດັ່ງນັ້ນພວກເຮົາຈະບໍ່ວາງຈຸດໃດ ໜຶ່ງ.

ວິທີການ

ກ່ອນອື່ນ ໝົດ, ພວກເຮົາ ກຳ ລັງປ່ຽນຕົວເລກໃຫ້ເປັນເຊືອກ (let str). ຫຼັງຈາກນັ້ນ, ພວກເຮົາ ກຳ ລັງຂ້າມສາຍເຊືອກຈາກຂວາ. ພວກເຮົາ ກຳ ລັງໃຊ້ loop for this. ໃນແຕ່ລະ loop ພວກເຮົາ ກຳ ລັງໃສ່ສາມຕົວເລກຂອງມັນຕາມດ້ວຍຈຸດໆ.
ແຕ່ຫຼັງຈາກແຕ່ລະຕົວເລກລົງ, ພວກເຮົາຈະກວດເບິ່ງວ່າພວກເຮົາໄດ້ໄປເຖິງຂອບເຂດດ້ານຊ້າຍຂອງສາຍ str. ຖ້າແມ່ນ, ຫຼັງຈາກນັ້ນພວກເຮົາຈະແຍກວົງຈອນ. ຖ້າບໍ່ດັ່ງນັ້ນ, ພວກເຮົາຈະສືບຕໍ່ໃສ່ 3 ຕົວເລກແລະຫຼັງຈາກນັ້ນ 1 ຈຸດ.

ໃຫ້ສັງເກດວ່າການກວດກາຄັ້ງທີ 3 ເພື່ອໃສ່ຈຸດແມ່ນຈຸດ ສຳ ຄັນ, ເຊິ່ງຈະຖືກ ນຳ ໃຊ້ໃນສະຖານະການເຊັ່ນ 123 ຫລື 123.456 ຫຼື 123.456.789 ບ່ອນທີ່ພວກເຮົາບໍ່ ຈຳ ເປັນຕ້ອງໃສ່ຈຸດກ່ອນຕົວເລກດ້ານຊ້າຍ.
ເນື່ອງຈາກວ່າພວກເຮົາ ກຳ ລັງໃສ່ຕົວອັກສອນຈາກຂວາຫາຊ້າຍດັ່ງນັ້ນສະຕິງທີ່ຖືກສ້າງຂື້ນຂອງພວກເຮົາຕ້ອງໄດ້ປ່ຽນຄືນເພື່ອໃຫ້ໄດ້ ຄຳ ຕອບສຸດທ້າຍ. ດັ່ງນັ້ນ, ຫລັງຈາກປ່ຽນ ໃໝ່ string, ກັບຄືນມັນ.

ພັນ Seetrator Leetcode Solution

ການປະຕິບັດ

ໂປຣແກຣມ C ++ ສຳ ລັບຜະລິດຕະພັນ Separator ພັນ Seetrator Leetcode Solution

#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

Java Program ສຳ ລັບການແກ້ບັນຫາພັນ Seetrator Leetcode

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 (len): ພວກເຮົາ ກຳ ລັງຜ່ານ ຈຳ ນວນທີ່ໄດ້ຮັບຈາກຕົວເລກຂວາຫາຊ້າຍດັ່ງນັ້ນເວລາທີ່ສັບສົນຈະເປັນ O (len) ບ່ອນທີ່ len ແມ່ນ ຈຳ ນວນຕົວເລກໃນ ຈຳ ນວນທີ່ໃຫ້.

ຄວາມສັບສົນໃນອະວະກາດ 

O (len): ພວກເຮົາໄດ້ໃຊ້ເຄື່ອງຈັກສ້າງສາຍໃນ java ແລະສາຍໃນ c ++ ດັ່ງນັ້ນການໃຊ້ພື້ນທີ່ພິເສດເຮັດໃຫ້ພື້ນທີ່ສັບສົນ O (len).