ຊອກຫາຕົວເລກທີ່ມີ ຈຳ ນວນຕົວເລກຂອງຕົວເລກ Leetcode Solution


ລະດັບຄວາມຫຍຸ້ງຍາກ Easy
ຖາມເລື້ອຍໆໃນ Quora
Array

ໃນບັນຫານີ້, ພວກເຮົາໄດ້ຮັບ array ຂອງເລກເຕັມໃນທາງບວກ. ພວກເຮົາ ຈຳ ເປັນຕ້ອງຊອກຫາການນັບ ຈຳ ນວນຂອງຕົວເລກທີ່ມີ ຈຳ ນວນຕົວເລກຢູ່.

ຍົກຕົວຢ່າງ

Array = {123 , 34 , 3434 , 121 , 100}
2

ຄໍາອະທິບາຍ: ມີພຽງ 34 ແລະ 3434 ເທົ່າກັບ ຈຳ ນວນເລກຂອງຕົວເລກ. ສະນັ້ນ, ພວກເຮົາພິມ 2.

Array = {1 , 111 , 11111 , 12345}
0

ຄໍາອະທິບາຍ: ບໍ່ມີເລກເຕັມທີ່ມີ ຈຳ ນວນຕົວເລກຢູ່ໃນແຖວທີ່ໃຫ້ໄວ້.

ວິທີການ

ຫຼັກຂອງປັນຫານີ້ແມ່ນການນັບ ຈຳ ນວນຕົວເລກໃນຕົວເລກເຕັມ. ຖ້າພວກເຮົາສາມາດເຮັດໄດ້, ຫຼັງຈາກນັ້ນພວກເຮົາສາມາດເຮັດຊ້ ຳ ຂັ້ນຕອນ ສຳ ລັບທຸກໆເລກໃນແຖວແລະນັບ ຈຳ ນວນເລກເຕັມມີ ຈຳ ນວນຕົວເລກຢູ່. ໃນການເປັນຕົວແທນຖານສອງ, ພວກເຮົາສາມາດປ່ຽນຕົວເລກທີ່ຖືກມອບໃຫ້ (ຫຼືແບ່ງມັນ 2) ຈົນກວ່າມັນຈະກາຍເປັນສູນເພື່ອນັບ ຈຳ ນວນ bits ໃນ​ມັນ. ເຊັ່ນດຽວກັນ, ສຳ ລັບການນັບຕົວເລກ, ພວກເຮົາສາມາດສືບຕໍ່ແບ່ງປັນເລກເຕັມໂດຍ 10 ເວັ້ນເສຍແຕ່ວ່າມັນຈະກາຍເປັນ 0. ວິທີການນີ້ແມ່ນຄວາມຈິງ ສຳ ລັບພື້ນຖານໃດໆ.

ຊອກຫາຕົວເລກທີ່ມີ ຈຳ ນວນຕົວເລກຂອງຕົວເລກ Leetcode Solution

 

ລະບົບວິເຄາະ

  1. ພວກເຮົາສ້າງ ໜ້າ ທີ່ findNumbers () ເພື່ອຊອກຫາ ຈຳ ນວນຂອງເລກເຕັມມີ ຈຳ ນວນເລກຂອງຕົວເລກໃນອາເລໃດ ໜຶ່ງ ທີ່ສົ່ງຕໍ່ໃຫ້ມັນ
  2. ພ້ອມກັນນີ້, ພວກເຮົາສ້າງ ໜ້າ ທີ່ຜູ້ຊ່ວຍ numberOfDigits () ເພື່ອສົ່ງ ຈຳ ນວນຕົວເລກໃນ ຈຳ ນວນທີ່ສົ່ງໄປທີ່ມັນຄື:
    1. ເລີ່ມຕົ້ນ cnt = 0
    2. ໃນຂະນະທີ່ເລກເຕັມ, n ໃຫຍ່ກວ່າ 0:
      1. ການເພີ່ມຂື້ນ cnt, cnt ++
      2. ແບ່ງປັນ n by 10, n / = 10
    3. ການກັບຄືນມາ cnt
  3. ເລີ່ມຕົ້ນ ຜົນ = 0 ເພື່ອເກັບຮັກສາ ຈຳ ນວນເລກເຕັມທີ່ມີ ຈຳ ນວນຕົວເລກຢູ່
  4. ສຳ ລັບທຸກໆອົງປະກອບໃນແຖວ:
    1. ພວກເຮົາດຶງເອົາຕົວເລກຂອງຕົວເລກໃນມັນໂດຍໃຊ້ numberOfDigits () ຫນ້າທີ່
    2. ຖ້າຫາກວ່າຕົວເລກຂອງຕົວເລກທີ່ໄດ້ຮັບແມ່ນເຖິງແມ່ນວ່າ:
      1. ຜົນການເພີ່ມຂື້ນ, ຜົນໄດ້ຮັບ ++
  5. ຜົນໄດ້ຮັບຜົນຕອບແທນ

ການປະຕິບັດການຊອກຫາຕົວເລກທີ່ມີຈໍານວນຕົວເລກຂອງ Leetcode Solution

ໂຄງການ C ++

#include <bits/stdc++.h>
using namespace std;

int numberOfDigits(int n)
{
    int cnt = 0;
    while(n > 0)
    {
        n /= 10;
        cnt++;
    }
    return cnt;
}

int findNumbers(vector <int> &a)
{
    int result = 0;
    for(int &i : a)
        if(numberOfDigits(i) % 2 == 0)
            result++;

    return result;
}

int main()
{
    vector <int> a = {123 , 34 , 3434 , 121 , 100};
    cout << findNumbers(a) << '\n';
    return 0;
}

Java Program

class find_numbers
{
    public static void main(String args[])
    {
        int[] a = {123 , 34 , 3434 , 121 , 100};
        System.out.println(findNumbers(a));
    }

    static int numberOfDigits(int n)
    {
        int cnt = 0;
        while(n > 0)
        {
            n /= 10;
            cnt++;
        }
        return cnt;
    }

    static int findNumbers(int[] a)
    {
        int result = 0;
        for(int i = 0 ; i < a.length ; i++)
            if(numberOfDigits(a[i]) % 2 == 0)
                result++;

        return result;
    }
}
2

ການວິເຄາະຄວາມສັບສົນຂອງການຊອກຫາຕົວເລກທີ່ມີເຖິງແມ່ນວ່າຈໍານວນຕົວເລກຂອງ Leetcode Solution

ຄວາມສັບສົນເວລາ

ຄວາມສັບສົນຂອງເວລາແມ່ນ ໂອ (N) ບ່ອນທີ່ N = ຂະ ໜາດ ຂອງຂບວນດັ່ງທີ່ພວກເຮົາເຮັດຜ່ານ array ດຽວແລະ ຈຳ ນວນຕົວເລກຈະຖືກເກັບຄືນໃນເວລາຄົງທີ່.

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

O (1) ດັ່ງທີ່ພວກເຮົາໃຊ້ພຽງແຕ່ພື້ນທີ່ ໜ່ວຍ ຄວາມ ຈຳ ເທົ່ານັ້ນ