c# - 获取列表的所有对角线元素
问题描述
我有一个二维字符串数组,我试图在其中找到每个元素的所有对角线元素。
例如:
输入:
ABCD
PRAT
KITA
ANDY
输出:
{
{ { "ARTY" } },
{ { "BAA" }, { "BP" } },
...
}
解释,
- (0, 0) 处元素的对角线元素是“ARTY”
- (0, 1) 处的元素的对角线元素是右边的“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;
}
解决方案
尝试这个:
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();
}
}
推荐阅读
- flutter - 如何在通知栏 Flutter 中获取多个 FCM
- java - 从一个类中获取 Intent 值并将 Intent 设置为另一个类
- c# - 如何使用 ServiceBusProcessor.ProcessErrorAsync
- optimization - Julia - 了解 JuMP Gurobi 输出
- xml - 在 XML 中拆分分隔字符串并通过 XSL 将值写入不同的变量
- python-3.x - 比较两个字符串中单词的位置
- testing - 编剧测试执行报告
- fortran - gnuplot 图的数据格式
- angular - 如何以角度开玩笑地从单个文件中获取覆盖范围
- python - pytorch torch/autograd.py 错误:RuntimeError:梯度计算已被就地操作修改