问题是:编写一个函数 (AllExist),它接收一个非空堆栈 stk (int) 作为参数,如果堆栈中每个数字的所有第一个数字都作为最后一个数字出现,它将返回 true stk的个数,否则返回false。例如:对于stk(从顶部开始向下)122、251、565、12334、28、7。该函数将返回true。1 、 2 、 5 和 7 作为堆栈中任何数字的最后一位出现。
** clone 是一个函数,它返回与给定堆栈相同的堆栈。
我的建议:
public static bool AllExist(stack<int> stk)
{
int x=0; int i; int z; bool bl; string str;
stack <int> stk1=clone (stk);
while (!stk1.IsEmpty())
{
i=stk1.Pop();
while(i>=10)
i/=10;
x=x*10+i;
}
str=x.ToString();
stack<int> stk2=Clone(stk);
while(!stk2.IsEmpty())
{
z=stk2.Pop()%10;
if (str.IndexOf(z.ToString())>-1)
bl=true;
bl=false;
}
return bl;
}
Run Code Online (Sandbox Code Playgroud)
** 这都是翻译,如有任何误解,敬请谅解。
谢谢你!
您可以使用 LINQ 解决此问题,例如:
static void Main(string[] args)
{
Console.WriteLine(AllExist(new Stack<int>(new List<int>() { 122, 251, 565, 12334, 28, 7 })));
}
public static bool AllExist(Stack<int> stk) => stk.All(
firstDigitItem => stk.Where(
lastDigitItem => lastDigitItem.ToString().Last() == firstDigitItem.ToString().First())
.Count() > 0);
Run Code Online (Sandbox Code Playgroud)
怎么运行的:
或者更优化的方式:
public static bool AllExist(Stack<int> stk) => stk.All(
firstDigitItem =>
stk.Any(lastDigitItem => lastDigitItem.ToString().Last() == firstDigitItem.ToString().First()));
Run Code Online (Sandbox Code Playgroud)
在这里,使用“Any”,我们仅查找满足我们谓词的第一个元素,而不是所有“Where”元素。