Gran simulación ~ gran simulación, cómo escribir las preguntas de simulación

Hoy escribí una pregunta de simulación media durante 30 minutos, pero los ingresos (xiang) eran (shui) bastante (bo) ricos (ke) ,

Por lo tanto, clasifiqué especialmente mis habilidades para escribir preguntas simuladas y las compartí contigo.

El problema de simulación más clásico es la matriz de serpientes,

No hablaremos de esto hoy (bushi

Enlace del tema:

498. Travesía diagonal - LeetCode icono-predeterminado.png?t=M4ADhttps://leetcode.cn/problems/diagonal-traverse/submissions/

Ideas del tema:

1. Divida el gran problema en pequeños problemas periódicos: en esta pregunta, podemos dividir el recorrido hacia arriba y hacia abajo en un ciclo, y simular la situación de cada ciclo por separado, y el problema se volverá simple;

2. Comenzando desde el límite, en cada ciclo de recorrido, sin importar si está atravesando oblicuamente hacia arriba o hacia abajo, se detiene inmediatamente después de alcanzar el límite de la matriz. Para el límite, se puede dividir en tres situaciones: en la diagonal Por encima de la línea, en la diagonal, por debajo de la diagonal. Tome los tres casos y escriba el código condicional por separado (no tenga miedo de que el código sea demasiado largo)

3. Preste especial atención al caso especial: el hecho de que esta pregunta no se le dé deliberadamente a la matriz cuadrada es en realidad para asustar a la gente. Solo hay un caso especial real, es decir, el caso de una sola columna, y el juicio termina por separado. .

Finalmente: el código

class Solution {
public:
    vector<int> findDiagonalOrder(vector<vector<int>>& mat) {
        vector<int>ans;
        int x = mat.size();
        int y = mat[0].size();
        int i = 0;
        int j = 1;
        if (y == 1)
        {
            for (int i = 0; i < x; i++)
                ans.push_back(mat[i][0]);
            return ans;
        }
        ans.push_back(mat[0][0]);
        while (j >= 0 && i <= x - 1 && i >= 0 && j <= y - 1)
        {
            // 向下遍历
            while (j >= 0 && i <= x - 1 && i >= 0 && j <= y - 1)
            {
                ans.push_back(mat[i][j]);
                if (j == 0 && i == x - 1)   //在左下角
                {
                    j++;
                    break;
                }
                else if (i <= x - 1 && j == 0)  // 在左边界不在左下角
                {
                    i++;
                    break;
                }
                else if (i == x - 1 && j != 0) // 在下边界不在左下角
                {
                    j++;
                    break;
                }
                else
                {
                    i++;
                    j--;
                }
            }
            // 向上遍历
            while (j >= 0 && i <= x - 1 && i >= 0 && j <= y - 1)
            {
                ans.push_back(mat[i][j]);
                if (j == y - 1 && i == 0)  // 在右上角
                {
                    i++;
                    break;
                }
                else if (i == 0 && j != y - 1)  // 在上边界不在右上角
                {
                    j++;
                    break;
                }
                else if (j == y - 1 && i != 0)  // 在右边界不在右上角
                {
                    i++;
                    break;
                }
                else
                {
                    j++;
                    i--;
                }
            }
        }
        return ans;
    }
};

Aquellos que estén interesados ​​pueden ir a ver el relleno del número en forma de serpiente >>》》

Espero compartir con usted. .

Supongo que te gusta

Origin blog.csdn.net/qq_61567032/article/details/125285347
Recomendado
Clasificación