我目前正在做一些代码挑战,我遇到了一个无法找到解决方案的问题。
.fixedbutton {
position: fixed;
bottom: 0;
background-color:#2bde73;
-moz-border-radius:5px;
-webkit-border-radius:5px;
border-radius:5px;
display:block;
width: 100%;
color:#ffffff;
font-size:15px;
text-decoration:none;
padding-top: 10px;
padding-bottom: 10px;
left : 0;
z-index : 99999;
-webkit-backface-visibility: hidden;
}
每当我尝试将字符串传递给它时,它会将单独的值存储为null im my digit array。例如,我试图传递值test1 =“1211”
答案 0 :(得分:0)
由于多种原因,您的方法有误:
1-您要比较计数和指数,您应该将计数与该指数中的值进行比较。
if (count == i)
应为if (count == char.GetNumericValue(digit[i]))
2-您应该计算索引而不是存储在该索引处的字符:
3-最重要的是:当您发现不匹配时,您应该返回false。您无需比较计数成功匹配数字。
num.Count(x => x == digit[i]);
应为num.Count(x => x == char.Parse(i.ToString()));
(这不是首选逻辑,请在下方检查替代方案)
public static bool SelfDescribing(string num)
{
char[] digit = num.ToArray();
int bound = digit.Count();
int sucessCount = 0;
for (int i = 0; digit.Length != 0 && i < bound; i++)
{
var count = num.Count(x => x == char.Parse(i.ToString()));
if (count == char.GetNumericValue(digit[i]))
{
sucessCount++;
}
}
return sucessCount == digit.Length;
}
优化您的方法:
public static bool SelfDescribing(string num)
{
for (int i = 0; i < num.Length; i++)
{
var count = num.Count(x => x == char.Parse(i.ToString()));
if (count != char.GetNumericValue(num[i]))
return false;
}
return true;
}
public static bool SelfDescribing(string num)
{
bool result = true;
int[] numbersArray = num.ToArray().Select(x => (int)char.GetNumericValue(x)).ToArray();
var occurences = numbersArray.GroupBy(x => x).ToDictionary(x => x.Key, x => x.Count());
for (int i = 0; i < numbersArray.Length; i++)
{
int occ;
if (occurences.TryGetValue(i, out occ))
{
if(occ != numbersArray[i])
{
result = false;
break;
}
}
else
{
if (i == 0)
continue;
}
}
return result;
}
答案 1 :(得分:0)
这会给你预期的结果吗?你还没有解释你想要做什么,但似乎arrLength应该只被初始化一次,可能。
public static bool SelfDescribing(string num)
{
char[] digit = num.ToArray();
int bound = digit.Count();
int arrLength = 0;
for (int i = 0; digit.Length != 0 && i < bound; i++)
{
var count = num.Count(x => x == digit[i]);
if (count == i)
{
arrLength++;
if (arrLength == bound)
{
return true;
}
}
}
return false;
}