我有一个网格,你可以在图中看到。首先,我需要找出字母“u”有多少不同的连接。我使用了一个youtube解释视频,他们在视频中谈到了LeetCode中的岛屿数量。使用+-相同的策略,我发现字母“u”有2个不同的连接。第一个连接包含22个字母“u”,第二个连接包含14个字母“u”.我的输出应该看起来像这样2(不同的连接,我已经找到了),22(没有这个),14(没有这个
输入1:
Input1 data
6和15是尺寸。
输出1:
2
22
14
输入2:
Input2 data
输出2:
1
5
现在,我需要编写一个算法来计算每个连接有多少个字母“u”。例如,第一个连接(在Input 1照片中,它是红色的)有22个字母“u”相互连接。第二个连接(在Input 1照片中,它是粉红色的)有14个字母“u”相互连接。
还有,我不能用linq。
在这段代码中,你可以看到我已经发现有两个不同的连接。
我还写了一个代码来查找每个连接包含多少个字母“u”,方法名为:公共静态int CountLetterUInConnection(char[][]网格),但它不起作用。
也许有人能发现我的错误并给我指出正确的道路,或者也许我做错了,我需要重做?
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string path = "App_Data/Map.txt";
string[] lines = File.ReadAllLines(HttpContext.Current.Server.MapPath(path));
int Width = int.Parse(lines[0]);
int Height = int.Parse(lines[1]);
Label4.Text = "Width: " + Width.ToString();
Label5.Text = "Height: " + Height.ToString();
for (int i = 2; i < lines.Length; i++)
{
var newRow = new TableRow();
var newCell = new TableCell();
newCell.Text = lines[i];
newRow.Cells.Add(newCell);
Table1.Rows.Add(newRow);
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string path = "App_Data/Map.txt";
string map = File.ReadAllText(HttpContext.Current.Server.MapPath(path));
char[][] grid = GetGridGFromMap(map);
int NumberOfMoles = TaskUtils.LettersIsU(grid);
int Count = TaskUtils.CountLetterUInConnection(grid);
// Label1.Text = "Cave count: " + NumberOfMoles.ToString();
Label1.Text = Count.ToString();
}
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
}
protected void TextBox2_TextChanged(object sender, EventArgs e)
{
}
private char[][] GetGridGFromMap(string map)
{
string[] lines = map.Split('\n');
char[][] grid = new char[lines.Length][];
for(int i =0; i < lines.Length; i++)
{
grid[i] = lines[i].ToCharArray();
}
return grid;
}
}
class TaskUtils
{
public static int LettersIsU(char[][] grid)
{
int count = 0;
for (int i = 0; i < grid.Length; i++)
{
for (int j = 0; j < grid[i].Length; j++)
{
if (grid[i][j] == 'u')
{
count++;
SetCountedLetters(grid, i, j);
}
}
}
return count;
}
private static void SetCountedLetters(char[][] grid, int i, int j)
{
if (i < 0 || i >= grid.Length || j < 0 || j >= grid[i].Length || grid[i][j] == 'z')
return;
grid[i][j] = 'z';
SetCountedLetters(grid, i + 1, j);
SetCountedLetters(grid, i - 1, j);
SetCountedLetters(grid, i, j + 1);
SetCountedLetters(grid, i, j - 1);
}
public static int CountLetterUInConnection(char[][] grid)
{
int count = 0;
for (int i = 0; i < grid.Length; i++)
{
for (int j = 0; j < grid[i].Length; j++)
{
if (grid[i][j] == 'u')
{
count++;
if ((i - 1 >= 0 && grid[i - 1][j] == 'u') || (i + 1 < grid.Length && grid[i + 1][j] == 'u')
|| (j - 1 >= 0 && grid[i][j - 1] == 'u') || (j + 1 < grid[i].Length && grid[i][j + 1] == 'u'))
{
count++;
}
}
}
}
return count;
}
}`
1条答案
按热度按时间t1rydlwq1#
如果是我,我会将
int LettersIsU(char[][] grid)
重构为int[] LettersIsU(char[][] grid)
,其中数组的长度是找到的连续组的数量,数组中的每个值是每个组中的计数。我会这样做: