Stroboqrammatik Nömrə LeetCode Həlli

Çətinlik səviyyəsi Asan
Tez-tez soruşulur Cisco Facebook google microsoft KahinBaxılıb 85

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

Problem bəyanat

Stroboqrammatik Nömrə LeetCode Həlli – Sətir verilir num tam ədədi təmsil edən qaytar true if num birdir strobogrammatik nömrə.

strobogrammatik nömrə çevrildikdə eyni görünən ədəddir 180 dərəcə (baş aşağı baxdı).

misal

Test işi 1:

Input:

sayı = "69"

Çıxış:

doğru

Test işi 2:

Input:

sayı = "692"

Çıxış:

saxta

Izahat

i) İlk sınaq işi üçün “69”-u 180 dərəcə fırlasaq, bu eynidir.

ii) İkinci sınaq işi üçün “692”-ni 180 dərəcə çevirsək, bu eyni rəqəm deyil.

Yanaşma

Fikir

180 dərəcə fırlananda hər bir rəqəmin nəyə çevriləcəyini müəyyən etməliyik. Hər bir rəqəm üçün üç imkan var:

  1. etibarsız olur
  2. eyni qalır
  3. fərqli bir rəqəmə çevrilir

Biz nəzərdən keçirəcəyik a rəqəmli olmaq dönər yalnız və yalnız o halda ki, fırlanan zaman həmin rəqəm etibarlı rəqəmə çevrilərsə. Diqqətlə düşünsək, 0, 1, 6, 8, 9 olduğunu müəyyən edə bilərik dönər çünki yalnız bu rəqəmlər 180 dərəcə tərs çevrildikdə etibarlıdır. Beləliklə, əgər nömrədə bunlardan başqa hər hansı bir rəqəm varsa, onun a olmadığını asanlıqla deyə bilərik strobogrammatik nömrə. Digər rəqəmlər üçün onların fırlanmasının həmkarındakı rəqəmlə eyni olub olmadığını yoxlamaq lazımdır.Stroboqrammatik Nömrə LeetCode Həlli

Strobogrammatic Number LeetCode Həll kodu

Java Proqramı

class Solution {
    public boolean isStrobogrammatic(String num) {
        Map<Character, Character> map = new HashMap<Character, Character>();
        map.put('6', '9');
        map.put('9', '6');
        map.put('0', '0');
        map.put('1', '1');
        map.put('8', '8');

        int l = 0, r = num.length() - 1;
        while (l <= r) {
            if (!map.containsKey(num.charAt(l))) return false;
            if (map.get(num.charAt(l)) != num.charAt(r))
                return false;
            l++;
            r--;
        }

        return true;
    }
}

C ++ Proqramı

class Solution {
public:
    bool isStrobogrammatic(string num) {
        unordered_map<char, char> lut{{'0', '0'}, {'1', '1'}, {'6', '9'}, {'8', '8'}, {'9', '6'}};
        for (int l = 0, r = num.size() - 1; l <= r; l++, r--) {
            if (lut.find(num[l]) == lut.end() || lut[num[l]] != num[r]) {
                return false;
            }
        }
        return true;
    }
};

Python proqramı

class Solution(object):
    def isStrobogrammatic(self, num):
      
        maps = {("0", "0"), ("1", "1"), ("6", "9"), ("8", "8"), ("9", "6")}
        i,j = 0, len(num) - 1
        while i <= j:
            if (num[i], num[j]) not in maps:
                return False
            i += 1
            j -= 1
        return True

Stroboqrammatik Nömrə LeetCode Həlli üçün Mürəkkəblik Təhlili

Qoy N giriş sətirinin uzunluğu olsun.

Zamanın mürəkkəbliyi: O (N)

Hər biri üçün N sətirdəki rəqəmlər, biz tək axtarış və müqayisə edirik.

Kosmik mürəkkəblik: O (1)

Biz yalnız daimi əlavə yerdən istifadə edirik. Bu, yerində alqoritmdir.

Referans: https://en.wikipedia.org/wiki/Strobogrammatic_number

Crack Sistemi Dizayn Müsahibələri
Translate »
1