[英]C# how to determine the last iteration of foreach loop
我正在嘗試建立一個計算零之間的零數目的函數。 我的函數對於以1開頭和以1結尾的二進制文件做的很好。 但是問題在於,如果給定的二進制數為100000,則返回5。但是它應該返回零,因為它不在1與2之間。
這是代碼。
private static int solution1(int N)
{
string binary = Convert.ToString(N, 2);
int gap = 0;
int longestgap = 0;
foreach (char Z in binary)
{
if (Z == '0') gap++;
if (gap > longestgap) longestgap = gap;
if (Z == '1') gap = 0;
}
return longestgap;
}
您需要做的就是移動第二個if
。 僅當您知道絕對在兩個1之間時,您才不想每次都覆蓋最長的間隔。
if (Z == '0')
{
gap++;
}
else // if (Z == '1')
{
if (gap > longestgap)
{
longestgap = gap;
}
gap = 0;
}
這樣,即使間隔一直持續到二進制結束,如果找不到第二個'1'
,最長的間隔仍為0。
尚未經過實際測試,但類似這樣的方法應該起作用:
bool firstOneFound = false; // To account for the case "00001"
foreach (char Z in binary)
{
if (Z == '0')
{
if(firstOneFound)
gap++;
}
else if (Z == '1')
{
if (gap > longestgap)
longestgap = gap;
firstOneFound = true;
gap = 0;
}
}
如果您不需要使用foreach
循環,這似乎更干凈:
for(int i = binary.IndexOf("1"); i < binary.Length; i++)
{
char Z = binary[i];
if (Z == '0')
{
gap++;
}
else if (Z == '1')
{
if (gap > longestgap)
longestgap = gap;
gap = 0;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.