我想检查一个数组,如果它的三个值之和为0。一个条件是不允许三元组(0,0,0)
public static List<List<int>> ThreeSum(int[] num)
{
List<List<int>> returnList = new List<List<int>>();
for (int i = 0; i < num.Length; i++)
{
for (int j = 0; j < num.Length; j++)
{
for (int k = 0; k < num.Length; k++)
{
if (num[i] + num[j] + num[k] == 0 && num[i] <= num[j] && num[j] <= num[k] && (num[i] !=0 && num[j]!= 0 && num[k]!= 0))
{
List<int> listInt = new List<int>();
listInt.Add(num[i]);
listInt.Add(num[j]);
listInt.Add(num[k]);
if (!returnList.Contains(listInt))
{
returnList.Add(listInt);
}
}
}
}
}
return returnList;
}
这是我挣扎的线 if (num[i] + num[j] + num[k] == 0 && num[i] <= num[j] && num[j] <= num[k] && (num[i] !=0 && num[j]!= 0 && num[k]!= 0))
因此,我尝试了另一种方法:(num[i] !=0 && num[j]!= 0 && num[k]!= 0)
确保同时满足所有这些条件。您可能知道这对我不起作用。结果中不允许每个零,但只能防止出现三个零。
一种解决方案是:(-1,0,1)但我不会得到它,因为我的条件不接受其中的零。
链接到问题(如果有兴趣):https : //leetcode.com/problems/3sum/
您以前的条件是错误的;这意味着i,j和k必须都与0不同。这!(i == 0 || j == 0 || k == 0)
是您要执行的操作。
我会这样:
public static List<List<int>> ThreeSum(int[] num)
{
List<List<int>> returnList = new List<List<int>>();
foreach (int i in num)
{
foreach (int j in num)
{
foreach (int k in num)
{
if (i + j + k == 0 && i <= j && j <= k && !(i == 0 || j == 0 || k == 0))
{
returnList.Add(new List<int> { i, j, k });
}
}
}
}
return returnList;
}
如果您有点受虐狂,请执行以下操作:
public static List<List<int>> ThreeSum(int[] num)
{
List<List<int>> returnList = new List<List<int>>();
foreach (List<int> listInt in num.SelectMany(i => num.SelectMany(j => num.Where(k => i + j + k == 0 && i <= j && j <= k && !(i == 0 || j == 0 || k == 0)).Select(k => new List<int> {i, j, k}).Where(listInt => !returnList.Contains(listInt)))))
{
returnList.Add(listInt);
}
return returnList;
}
顺便说一句,检查returnList是否包含新列表是无用的,因为它始终为false。(请参阅第一个代码的编辑,第二个代码无法更新。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句