రూక్ లీట్‌కోడ్ పరిష్కారం కోసం అందుబాటులో ఉన్న క్యాప్చర్‌లు


కఠినత స్థాయి సులువు
తరచుగా అడుగుతుంది స్క్వేర్
అర్రే

సమస్యల నివేదిక

ఈ సమస్యలో, మనకు 2-D మాతృక ఇవ్వబడుతుంది చెస్ బోర్డ్ ఒక తెలుపు రూక్ మరియు దానిపై కొన్ని ఇతర ముక్కలు. వైట్ యొక్క రూక్ పాత్ర ద్వారా ప్రాతినిధ్యం వహిస్తుంది 'ఆర్'. వైట్ యొక్క బిషప్లు ప్రాతినిధ్యం వహిస్తారు 'బి' మరియు నలుపు బంటులు ప్రాతినిధ్యం వహిస్తాయి 'p'. పైన పేర్కొన్నవి తప్ప వేరే భాగం లేదని సమస్య హామీ ఇస్తుంది. మా లక్ష్యం తెలుపు కదలిక ద్వారా ఒక కదలికలో పట్టుకోగలిగే నల్ల బంటుల సంఖ్యను కనుగొనడం (సాధారణ చెస్ నియమాలను పరిగణనలోకి తీసుకోవడం).

ఉదాహరణ

board = [[".",".",".",".",".",".",".","."],
         [".",".",".","p",".",".",".","."],
         [".",".",".","R",".",".",".","p"],
         [".",".",".",".",".",".",".","."],
         [".",".",".",".",".",".",".","."],
         [".",".",".","p",".",".",".","."],
         [".",".",".",".",".",".",".","."],
         [".",".",".",".",".",".",".","."]]
3
board = [[".",".",".",".",".",".",".","."],
         [".","p","p","p","p","p",".","."],
         [".","p","p","B","p","p",".","."],
         [".","p","B","R","B","p",".","."],
         [".","p","p","B","p","p",".","."],
         [".","p","p","p","p","p",".","."],
         [".",".",".",".",".",".",".","."],
         [".",".",".",".",".",".",".","."]]
0

వివరణ

రూక్ లీట్‌కోడ్ పరిష్కారం కోసం అందుబాటులో ఉన్న క్యాప్చర్‌లు

అప్రోచ్

మొదట చెస్ బోర్డ్ 2-డిలో రూక్ యొక్క స్థానాన్ని కనుగొనడం సమస్యకు సంబంధించిన విధానం అమరిక ఆపై మేము ఒక నల్ల బంటు ('p') ను కనుగొనగలమా అని తెలుసుకోవడానికి ఎగువ, ఎడమ, కుడి మరియు దిగువ దిశలలో పునరుక్తిగా తనిఖీ చేయవచ్చు. ఒకవేళ, మేము ఏ దిశలోనైనా ఒకే రంగు యొక్క బిషప్‌ను చేరుకుంటాము లేదా కొట్టాము, మేము ఆ దిశలో తనిఖీ చేయడాన్ని ఆపివేస్తాము.

అల్గారిథం

  1. 'R' అక్షరాన్ని కనుగొనడానికి మొత్తం మాతృకలో ప్రయాణించి, దాని వరుస మరియు కాలమ్ సంఖ్యను సేవ్ చేయండి r, సి వరుసగా.
  2. ప్రారంభించును cnt సంగ్రహించగల బంటుల సంఖ్యను నిల్వ చేయడానికి
  3. ఎగువ దిశలో తనిఖీ చేయండి, పరిధి: i (0, r - 1):
      • if బోర్డు [i] [సి] == 'p':
        • ఇంక్రిమెంట్ cnt, cnt ++
        • విరామం
      • if బోర్డు [i] [సి] == 'బి':
        • విరామం
  4. ఎడమ, కుడి మరియు దిగువ దిశల కోసం అదే చేయండి
  5. రిటర్న్ cnt

రూక్ లీట్‌కోడ్ సొల్యూషన్ కోసం అందుబాటులో ఉన్న క్యాప్చర్‌ల అమలు

సి ++ ప్రోగ్రామ్

#include <bits/stdc++.h>

using namespace std;

int numRookCaptures(vector<vector<char>>& board)
{
    if(board.empty())
        return 0;
    int n = board.size() , m = board[0].size() , cnt = 0 , r , c;

    for(int i = 0 ; i < n ; i++)
        for(int j = 0 ; j < m ; j++)
        {
            if(board[i][j] == 'R')
            {
                r = i;
                c = j;
                break;
            }
        }


    for(int i = r - 1 ; i >= 0 ; i--)
    {
        if(board[i][c] == 'p')
        {
            cnt++;
            break;
        }
        if(board[i][c] == 'B')
            break;
    }
    for(int i = r + 1 ; i < n ; i++)
    {
        if(board[i][c] == 'p')
        {
            cnt++;
            break;
        }
        if(board[i][c] == 'B')
            break;
    }

    for(int j = c - 1 ; j >= 0 ; j--)
    {
        if(board[r][j] == 'p')
        {
            cnt++;
            break;
        }
        if(board[r][j] == 'B')
            break;
    }

    for(int j = c + 1 ; j < m ; j++)
    {
        if(board[r][j] == 'p')
        {
            cnt++;
            break;
        }
        if(board[r][j] == 'B')
            break;
    }
    return cnt;
}

int main() {
    vector <vector <char> > board = {{'.','.','.','.','.','.','.','.'},
                                    {'.','.','.','p','.','.','.','.'},
                                    {'.','.','.','R','.','.','.','p'},
                                    {'.','.','.','.','.','.','.','.'},
                                    {'.','.','.','.','.','.','.','.'},
                                    {'.','.','.','p','.','.','.','.'},
                                    {'.','.','.','.','.','.','.','.'},
                                    {'.','.','.','.','.','.','.','.'}};


    cout << numRookCaptures(board) << endl;
    return 0;
}

జావా ప్రోగ్రామ్

class number_of_rook_captures {

    public static void main(String args[]) {
        char[][] board = {{'.','.','.','.','.','.','.','.'},
                         {'.','.','.','p','.','.','.','.'},
                         {'.','.','.','R','.','.','.','p'},
                         {'.','.','.','.','.','.','.','.'},
                         {'.','.','.','.','.','.','.','.'},
                         {'.','.','.','p','.','.','.','.'},
                         {'.','.','.','.','.','.','.','.'},
                         {'.','.','.','.','.','.','.','.'}};

        System.out.println(numRookCaptures(board));
    }

    public static int numRookCaptures(char [][] board) {
        if(board.length == 0)
            return 0;
        int n = board.length , m = board[0].length , cnt = 0 , r = -1 , c = -1;

        for(int i = 0 ; i < n ; i++)
            for(int j = 0 ; j < m ; j++)
            {
                if(board[i][j] == 'R')
                {
                    r = i;
                    c = j;
                    break;
                }
            }


        for(int i = r - 1 ; i >= 0 ; i--)
        {
            if(board[i][c] == 'p')
            {
                cnt++;
                break;
            }
            if(board[i][c] == 'B')
                break;
        }
        for(int i = r + 1 ; i < n ; i++)
        {
            if(board[i][c] == 'p')
            {
                cnt++;
                break;
            }
            if(board[i][c] == 'B')
                break;
        }

        for(int j = c - 1 ; j >= 0 ; j--)
        {
            if(board[r][j] == 'p')
            {
                cnt++;
                break;
            }
            if(board[r][j] == 'B')
                break;
        }

        for(int j = c + 1 ; j < m ; j++)
        {
            if(board[r][j] == 'p')
            {
                cnt++;
                break;
            }
            if(board[r][j] == 'B')
                break;
        }
        return cnt;
    }
}
3

రూక్ లీట్‌కోడ్ సొల్యూషన్ కోసం అందుబాటులో ఉన్న క్యాప్చర్‌ల సంక్లిష్టత విశ్లేషణ

సమయం సంక్లిష్టత

O (1), మేము స్థిరమైన సంఖ్యను పునరావృతం చేస్తున్నప్పుడు.

అంతరిక్ష సంక్లిష్టత

O (1), మేము ఇన్‌పుట్‌తో సంబంధం లేకుండా స్థిరమైన మెమరీ స్థలాన్ని మాత్రమే ఉపయోగిస్తాము.