首页 > 解决方案 > 获取列表的所有对角线元素

问题描述

我有一个二维字符串数组,我试图在其中找到每个元素的所有对角线元素。

例如:

输入:

ABCD
PRAT
KITA
ANDY

输出:

{
{ { "ARTY" } },
{ { "BAA" }, { "BP" } },
...
}

解释,

我知道对角线是对称增加的,但我无法找到一种逻辑来获取每个元素的所有对角线。

这是我正在尝试的代码:

static void Main(string[] args)
{
    string[,] grid = {
        {   "A", "B", "C", "D"  },
        {    "P", "R", "A", "T" },
        {    "K", "I", "T", "A" },
        {    "A", "N", "D", "Y" }
    };
}

public static IEnumerable<string> FindAllDirectionWords(string[,] grid, int curRow, int curCol, int numRows, int numCols)
{
            // Find primary diagonal now
            string primaryDiagonalWord = string.Empty;
            for (int i = curRow, j = curCol; i < numRows && j < numCols; i++, j++)
                primaryDiagonalWord += grid[i, j];
            yield return primaryDiagonalWord;


            // Find secondary diagonal now
            string secondaryDiagonalWord = string.Empty;
            for (int i = curRow, j = curCol; i < numRows && j < numCols; i++, j++)
                secondaryDiagonalWord += grid[i, j];
            yield return secondaryDiagonalWord;
}

标签: c#arrays

解决方案


尝试这个:

static class Program
{
    static void Main(string[] args)
    {
        // Write code here:
        var grid = new string[,] {
            {  "A", "B", "C", "D" },
            {  "P", "R", "A", "T" },
            {  "K", "I", "T", "A" },
            {  "A", "N", "D", "Y" }};

        Console.WriteLine(string.Join("|", grid.FindDiagonalWords(2, 1)));
        // (2,1) "I" => "PID|DAIA"
    }

    public static IEnumerable<string> FindDiagonalWords(this string[,] grid, int row, int column)
    {
        int numRows = grid.GetLength(0);
        int numCols = grid.GetLength(1);

        var sb = new StringBuilder();
        for (int i = 0; i < numRows; i++)
        {
            int j = (i-row)+column;
            if (j>=0 && j<numCols)
            {
                sb.Append(grid[i, j]);
            }
        }
        yield return sb.ToString();

        sb.Clear();
        for (int i = 0; i < numRows; i++)
        {
            int j = row+column-i;
            if (j>=0 && j<numCols)
            {
                sb.Append(grid[i, j]);
            }
        }
        yield return sb.ToString();
    }
}

推荐阅读