给定数字作为输入的数组,从数组中删除所有元素,它们是3的倍数或者其中包含数字3。对于例如如果它们存在,则将从阵列中移除13和15。
MyApproach
要删除3,我已经使函数removeMultiple首先删除了3的倍数(如果存在的话)。然后我还创建了函数removeDigit如果数字不是3的倍数,则删除数字3。 但我没有得到预期的产出。
MyQuestion:我在我的代码中做错了什么。任何人都可以指导我吗?
@Edit:
boolean containsDigit3(int[] arr,int index)
{
boolean b1=false;
while(arr[index]>0)
{
int p=arr[index]%10;
if(p==3)
{
b1=true;
}
arr[index]=arr[index]/10;
}
if(b1==true)
return true;
else
return false;
}
boolean isMultipleOf3(int[] arr,int index)
{
boolean b1=false;
int p=arr[index]%3;
if(p==0)
{
b1=true;
}
if(b1==true)
return true;
else
return false;
}
public int[] remove(int[] arr)
{
// Array of max length
int p[] = new int[arr.length];
int count = 0;
for (int i = 0; i < arr.length; i++)
{
if (!isMultipleOf3(arr,i) && !containsDigit3(arr,i))
{
p[i] = arr[i];
++count;
}
}
// Array of right length - System.arraycopy not allowed?!
int[] q = new int[count];
for (int i = 0; i < q.length; ++i)
{
q[i] = p[i];
}
return q;
}
Parameters Actual Output Expected Output
'{24,27,30,31,34,37,40,42}' {0} {40}
答案 0 :(得分:1)
我会像这样写
`for i in list1:
if i not in dict1.keys():
dict1[0] = list1[0]
dict1[1] = list1[1]
dict1[2] = list1[2]
print(dict1)`
我必须对其进行硬编码。不允许使用内置函数。
在这种情况下,我会做类似上面的事情,除了&#34;硬编码&#34;
public int[] remove(int[] arr) {
return IntStream.of(arr)
.filter(i -> i % 3 != 0)
.filter(i -> !(""+i).contains("3"))
.toArray();
}
所以
public static int[] remove(int[] arr) {
int[] ret = new int[arr.length];
int count = 0;
OUTER:
for (int i : arr) {
if (i % 3 == 0)
continue;
int j = i;
while (j > 0) {
if (j % 10 == 3)
continue OUTER;
j /= 10;
}
ret[count++] = i;
}
// do the same as Arrays.copyOf(ret, count)
if (ret.length > count) {
int[] ret2 = new int[count];
for (int i = 0; i < count; i++)
ret2[i] = ret[i];
return ret2;
}
return ret;
}
打印
int[] arr = {24, 27, 30, 31, 34, 37, 40, 42};
int[] arr2 = remove(arr);
System.out.println(Arrays.toString(arr2));
答案 1 :(得分:1)
在完整阵列上操作可能比以前更困难。将代码分解为小而精确的部分,不要混淆迭代和使用check-for-3逻辑复制数组。
考虑使用此方法删除不需要的元素:
public int[] remove(int[] arr) {
// Array of max length
int p[] = new int[arr.length];
int count = 0;
for (int i = 0; i < arr.length; i++) {
if (!isMultipleOf3(arr[i]) && !containsDigit3(arr[i])) {
p[count] = arr[i];
++count;
}
}
// Array of right length - System.arraycopy not allowed?!
int[] q = new int[count];
for (int i = 0; i < q.length; ++i) {
q[i] = p[i];
}
return q;
}
现在,您可以专注于boolean isMultipleOf3(int i)
和boolean containsDigit3(int i)
以下是一些非常基本的实现:
private boolean containsDigit3(int i) {
//indexOf returns position of character '3' in String that
//represents the number i. If '3' is not found it returns -1
//so indexOf('3') >= 0 is another way of saying "contains digit 3"
return Integer.toString(i).indexOf('3') >= 0;
}
private boolean isMultipleOf3(int i) {
return i%3 == 0;
}