Unikal Yollar II

Çətinlik səviyyəsi Mühit
Tez-tez soruşulur Amazon VMware
Dinamik proqramlaşdırma MatrisBaxılıb 75

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.

Tutaq ki, birinci hücrədə və ya sol üst küncdə dayanan bir kişi “A × b” matris. Kişi yalnız ya yuxarı, ya da aşağı hərəkət edə bilər. O insan varış yerinə çatmaq istəyir və onun üçün gedən yer, hüceyrənin son hücrəsidir matris və ya sağ alt künc.

Və içində bəzi maneələr varsa, insan tərəfindən nə qədər bənzərsiz yollar müəyyən edilə bilər. Unikal Yolların Xeyrini bilmədən təyinata çatmasına kömək edin.

Matrisdə maneə 1, boşluq 0 kimi qeyd olunur.

misal

Input:

[
[0,0,0],
[0,1,0],
[0,0,0]
]

Çıxış:

2

Explanation:

Çünki bütün matrisin ortasında yalnız iki əngəl mövcuddur ki, bu da yalnız iki bənzərsiz yola imkan verir: -

  1. Aşağı → Aşağı → Sağ → Sağ
  2. Sağ → Sağ → Aşağı → Aşağı

Unikal Yollar IIPin

Yuxarıdakı şəkildə mavi ox 1-ci, qırmızı ox 2-ci yolu göstərir.

Alqoritm

  1. [0] [0] massivi olan 1 xananın 0-dən ibarət olub olmadığını yoxlayın, bundan əvvəl irəliləyə bilmədiyi üçün unikal yolları XNUMX kimi qaytarın.
  2. [0] [0] massivində 1 dəyəri yoxdursa, [0] [0] = 1 massivinin başlanğıcını başladın.
  3. İndi, massivin birinci sətrində təkrarlayın və bu xana 1 varsa, bu cari hüceyrənin içində bir maneə var və bir hüceyrənin dəyərini 0 olaraq təyin edir. Başqa bir şey bu xananın dəyərini əvvəlki xana kimi təyin edir. massiv [i] [j] = massiv [i] [j-1].
  4. İndi, massivin birinci sütununun üstündən təkrarlayın və bu xana 1-i ehtiva edirsə, bu cari hüceyrənin içində bir maneə olduğu deməkdir və hüceyrənin dəyərini 0-a təyin edir. Başqa bir şey bu xananın dəyərini əvvəlki xana kimi təyin edir. massiv [i] [j] = massiv [i] [j-1].
  5. İndi, hücrə massivindən başlayaraq bütün matris üzərində təkrarlayın [1] [1].
  6. Xanada heç bir maneə olmadığını yoxlayın, onda arrayi edin, j] = array [i-1, j] + array [i, j-1].
  7. Bir hüceyrədə bir maneə varsa, başqa bir yolda təkrarlanmadığından əmin olmaq üçün hüceyrənin dəyərini 0 olaraq təyin edin.

Izahat

Beləliklə, bu sualı həll etmək üçün əsas fikrimiz bir hüceyrənin içərisində 0 dəyəri yoxdursa, deməli, hədəf hüceyrəyə çatma yollarının sayının yuxarıdakı hüceyrəyə çatma yollarının cəmidir. hüceyrə və həmin hücrədən sol hüceyrəyə çatma yollarının sayının cəmi.

Beləliklə, problemimizin həllində bizə kömək edəcək bəzi funksiyaları həyata keçirdik. GetVal funksiyasını elan etdik, getVal bəzi arqumentləri bəzi əməliyyatları yerinə yetirir və bəzi problemi qaytarır ki, bu da aşağıdakı problemi həll edəcəkdir:

  1. Birinci sətirdə bir hücrə maneə içərsə, dəyəri 0-a təyin edərsə, bu hüceyrənin dəyərini əvvəlki xananın [i] [j] = array [i] [j-1 olduğu kimi təyin edəcəkdir ].
  2. Birinci sətirdə bir hücrə maneə içərsə, dəyəri 0-a təyin edərsə, bu hüceyrənin dəyərini əvvəlki xana kimi [i] [j] = array [i-1] [j kimi təyin edəcəkdir. ].

misal

Buna görə Array = {{0,0,0}, {0,1,0}, {0,0,0}} kimi bir nümunə götürək;

Bir sıra findUniquePath-a ötürülür

Array = {{0,0,0}, {0,1,0}, {0,0,0}};

Beləliklə, onun [0] [0] massivi olan ilk xanası 1-ə bərabər deyil.

Beləliklə qurun, sıra [0] [0] = 1;

Sütun üzərində təkrarlama,

i = 1

array [1] [0] == 0 və array [0] [0] = 1 doğrudursa

belə array [1] [0] = 1;

i = 2;

array [2] [0] == 0 və array [1] [0] = 1 doğrudursa

belə array [2] [0] = 1;

İndi sıra ilə təkrarlanır,

i = 1

array [0] [1] == 0 və array [0] [0] = 1 doğrudursa

belə array [0] [1] = 1;

i = 2;

array [0] [2] == 0 və array [0] [1] = 1 doğrudursa

belə array [0] [2] = 1;

İndi serialdan başlayırıq [1] [1]

i = 1, j = 1

massiv [1] [1] == 0 səhvdirsə

belə [1] [1] = 0 massivi

i = 1, j = 2

massiv [1] [2] == 0 doğrudursa

array [i] [j] = array [i - 1] [j] + array [i] [j - 1];

so array[1][2]=array[0][2]+array[0][1];

array[1][2]=1+1=2;

i = 2, j = 1

massiv [2] [1] == 0 doğrudursa

belə [2] [1] = 0 massivi

i = 2, j = 2

massiv [2] [2] == 0 doğrudursa

array [i] [j] = array [i - 1] [j] + array [i] [j - 1];

so array[2][2]=array[1][2]+array[2][1];

massiv [2] [2] = 2 + 0;

massiv [2] [2] = 2

Yəni 2-nin tələb olunan nəticəmiz olduğu mənasını verən sıra [2] [2] qaytaracağıq.

Həyata keçirilməsi

Unikal Yollar II üçün C ++ proqramı

#include<iostream>
using namespace std;
int getVal(int x, int y)
{
    if(x==0 && y==1)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
int findUniquePath(int arr[3][3])
{
    if (arr[0][0] == 1)
    {
        return 0;
    }
    arr[0][0] = 1;
    for (int i = 1; i < 3; i++)
    {
        arr[i][0] = getVal(arr[i][0],arr[i-1][0]);
    }
    for (int i = 1; i < 3; i++)
    {
        arr[0][i] = getVal(arr[0][i],arr[0][i-1]);
    }
    for (int i = 1; i < 3; i++)
    {
        for (int j = 1; j < 3; j++)
        {
            if (arr[i][j] == 0)
            {
                arr[i][j] = arr[i - 1][j] + arr[i][j - 1];
            }
            else
            {
                arr[i][j] = 0;
            }
        }
    }
    return arr[2][2];
}
int main()
{
    int inputValue[3][3]= {{0,0,0},
                           {0,1,0},
                           {0,0,0}};
                           
    findUniquePath(inputValue);
    cout<<findUniquePath(inputValue);;
    return 0;
}
2

Unique Paths II üçün Java proqramı

class uniquePath2 {
  public static int getVal(int x, int y) {
    if (x == 0 && y == 1) {
      return 1;
    } else {
      return 0;
    }
  }
  public static int findUniquePath(int array[][]) {
    if (array[0][0] == 1) {
      return 0;
    }
    array[0][0] = 1;
    for (int i = 1; i<array.length; i++) {
      array[i][0] = getVal(array[i][0], array[i - 1][0]);
    }
    for (int i = 1; i<array[0].length; i++) {
      array[0][i] = getVal(array[0][i], array[0][i - 1]);
    }
    for (int i = 1; i<array.length; i++) {
      for (int j = 1; j<array[i].length; j++) {
        if (array[i][j] == 0) {
          array[i][j] = array[i - 1][j] + array[i][j - 1];
        } else {
          array[i][j] = 0;
        }
      }
    }

    int row = array.length;
    int col = array[0].length;
    return array[row - 1][col - 1];
  }
  public static void main(String[] args) {
    int inputValue[][] = {
      {
        0, 0, 0
      }, {
        0, 1, 0
      }, {
        0, 0, 0
      }
    };
    System.out.println(findUniquePath(inputValue));
  }
}
2

Unikal Yollar üçün Mürəkkəblik Təhlili II

Zamanın mürəkkəbliyi

O (a × b) burada a və b - hər hüceyrə yalnız bir dəfə işləndikdə bizə verilən matrisdəki sətir və sütun sayı.

Kosmik Mürəkkəblik

O (1) istifadə etdiyimizdən bəri əlavə yer istifadə olunmadığı üçün dinamik proqramlaşdırma.

arayış

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