په ټوله کې شمیره نه تکرار شوي نمرې سره


مشکل کچه منځني
په مکرر ډول دننه پوښتل کیږي اکولایټ حقیقت MAQ
ریاضی شمیره

تاسو ته مختلف شمیرې درکول کیږي (پیل ، پای). ورکړل شوې دنده وايي چې په لړ کې د تکرار عددونو سره د شمېرو ټول شمیره ومومئ.

بېلګه

تفتیش:

10 50

محصول:

37

وضاحت:

10 هیڅ تکرار شوې ګ hasه نه لري. 11 یو تکرار عدد لري. 12 هیڅ تکرار شوې ګ hasه نه لري. پداسې حال کې چې 22 ، 33 تکرار ټکی لري. نو کله چې موږ هغه شمیرې وموندلې چې هیڅ تکرار ډیجیټ نلري ، موږ به دا زموږ په پایله کې حساب کړو.

په ټوله کې شمیره نه تکرار شوي نمرې سره

الګوریتم

  1. اعلامیه a ټاکل شوی او یو ویکتور
  2. 0 او 1 ویکټور ته فشار ورکړئ او د 10 په اصطلاح کې ټول فاکتورونه ومومئ ، او پاتې برخه یې په سیټ کې وساتئ. که چیرې سیټ دمخه دا شمیره ولري 0 نور راستنئ.
  3. دا شمېره واخلئ او په. کې یې اضافه کړئ سیمه.
  4. د هرې پوښتنې لپاره ، د ویکتور [پای] او ویکٹر [پیل] توپیر بیرته راشئ.

په ټوله کې د تکرار شمیرې سره د بشپړ شمیرو لپاره توضیحات

موږ حد درکړ موږ د هغه شمیر شمیره معلومولو غوښتنه وکړه چې په ورکړل شوي سلسله کې راځي په خپله پخپله شمیره کې هیڅ تکرار شوی ډیجیټ نلري. د دې لپاره ، موږ د راټولولو چوکاټ کارولو ته ځو. موږ به د سیټ او ویکتور کاروو. سیټ د غیر معمولي فاکتورونو یا د یوې شمیره پاتې کیدو ذخیره کول دي او ویکتور د سیټ څخه فلټر شوي شمیرې ذخیره کول دي. موږ پوهیږو چې د دوی څخه یوازې په 10s ګsو کې یو شمیر شمیره تکرار نه کیږي ، لکه د 1 څخه تر 10 پورې ، هیڅ تکرار شمیره شتون نلري. له 11 څخه تر 10 او 21 څخه تر 30 پورې ، دوه شمیرې شتون لري چې د 11 او 22 په څیر تکرار شوي ، دا ورته کیږي.

موږ به 0 او 1 شمیره په ویکتور کې اضافه کړو ، له 2 ارزښت څخه ورکړل شوي ارزښت ته ، هر څه چې دا کیدی شي. هغه شمیره ترلاسه کړئ چې د 10 شرایطو سره فاکتور یا پاتې لري ، لکه څنګه چې پورته یادونه وشوه. موږ به هغه پاتې شوي کسان ترلاسه کړو او په سیټ کې به اضافه کړو که چیرې سیټ دمخه د پاتې شمیره په توګه دا شمیره ولري. 0 بیرته راستنیدل نور پاتې یې سیټ ته اضافه کړئ. لکه څنګه چې دا به یو نوی شمیره وي یا پاتې او بیرته راشي .1 تر هغه وخته پورې تعقیب وساتئ تر څو چې ارزښت 0 شي. دلته به موږ د ورته شمیره 0 یا 1 څخه ترلاسه کړو ، او دا به د هغه نمبر سره اضافه کړو چې دا یې د ویکټور له لارې راوړي ، او شمیره به ټک کړو پخپله ویکتور ته.

د هرې پوښتنې لپاره ، موږ به په سم موقعیت کې د شمیرو توپیر بیرته راوړو ، چې معنی یې د حق اندازه ده ، او په کی position موقعیت کې شمیرې په ویکټر کې کی left اړخ کې شمیره معنی لري. موږ به دا توپیر بیرته راولو ، دا به موږ اړین ځواب وی.

تطبیق

په مجموع کې د شمیرو تکرار پرته د شمیرو لپاره C ++ برنامه

#include <iostream>
#include<vector>
#include<unordered_set>

using namespace std;

int MAX = 1000;

vector<int> numbers = {0};

int getRepeatedNumber(int n)
{

    unordered_set<int> SET;
    int rem;

    while (n != 0)
    {
        rem = n % 10;
        if (SET.find(rem) != SET.end())
            return 0;

        SET.insert(rem);
        n = n / 10;
    }
    return 1;
}

void buildSetOfNumbers(int MAX)
{

    numbers.push_back(getRepeatedNumber(1));

    for (int i = 2; i < MAX + 1; i++)
        numbers.push_back(getRepeatedNumber(i) + numbers[i-1]);
}

int getNumber(int left,int right)
{
    return numbers[right] - numbers[left-1];
}
int main()
{
    int Left = 10, Right = 50;
    buildSetOfNumbers(MAX);

    cout << getNumber(Left, Right) << endl;

    return 0;
}
37

په ټوله لړ کې د تکرار ټکي سره د بشپړ شمیرو لپاره جاوا برنامې

import java.util.Vector;
import java.util.HashSet;

class repeatedDigits
{
    private static int MAX = 100;
    private static Vector<Integer> numbers = new Vector<>();
    
    static int getRepeatedNumber(int n)
    {
        HashSet<Integer> set = new HashSet<>();
        int rem;

        while (n != 0)
        {
            rem = n % 10;

            if (set.contains(rem))
                return 0;

            set.add(rem);
            n /= 10;
        }
        return 1;
    }
    
    static void buildSetOfNumbers()
    {
        numbers.add(0);
        numbers.add(getRepeatedNumber(1));

        for (int i = 2; i < MAX + 1; i++)
            numbers.add(getRepeatedNumber(i) + numbers.elementAt(i - 1));
    }
    
    static int getNumber(int left, int right)
    {
        return numbers.elementAt(right) - numbers.elementAt(left - 1);
    }
    
    public static void main(String[] args)
    {
        int Left = 10, Right = 50;

        buildSetOfNumbers();
        System.out.println(getNumber(Left, Right));
    }
}
37

د پیچلتیا تحلیل

د وخت پیچلتیا

O (1) ځکه چې اضافي وخت ته اړتیا نلري.

د ځای پیچلتیا

اې (N) هلته "n" په صف کې د عناصرو شمیر دی.