您的位置:首页 > 职场人生

遇到的面试题:二维数组中若含有0,其横竖的值都变为0

2017-08-22 14:23 295 查看
面试遇到一个二维数组的笔试考题,我多年没用过二维数组,顿时懵逼,但是我还是想到了思路,可惜连二维数组的语法都忘了,真是万万没想到。

回来我坐在电脑面前,我想了想,还是把它写出来了,我自己也觉得比较low,但是至少实现了。留个笔记,以后可以看看,若有新的写法我也会及时更新。

考题要求:将数组中有0位置的横竖列都设置为0



变为



以下是我实现的思路:

public class Test {

public static void main(String[] args) {
int[][] num = new int[4][3]; //定义了三行三列的二维数组
num[0][0] = 1; //给第一行第一个元素赋值
num[0][1] = 0; //给第一行第二个元素赋值
num[0][2] = 9; //给第一行第三个元素赋值

num[1][0] = 4; //给第二行第一个元素赋值
num[1][1] = 5; //给第二行第二个元素赋值
num[1][2] = 6; //给第二行第三个元素赋值

num[2][0] = 7; //给第三行第一个元素赋值
num[2][1] = 8; //给第三行第二个元素赋值
num[2][2] = 0; //给第三行第三个元素赋值

num[3][0] = 7; //给第四行第一个元素赋值
num[3][1] = 8; //给第四行第二个元素赋值
nu
9778
m[3][2] = 0; //给第四行第三个元素赋值

printArray(num);
System.out.println("-------------------");
int[][] ints = changegArray(num);
System.out.println("-------------------");
printArray(ints);

}

//打印输出数组
static void printArray(int[][] aa) {
for (int i = 0; i < aa.length; i++) {
for (int j = 0; j < aa[i].length; j++) {
System.out.print(aa[i][j] + " ");
}
System.out.println();
}
}

//改变数组的方法
static int[][] changegArray(int[][] aa) {
//用来记录为0的数组位置
List<int[]> list = new ArrayList<>();
//遍历二维数组
for (int i = 0; i < aa.length; i++) {
for (int j = 0; j < aa[i].length; j++) {
//判断当前下标的数组是否为0
if (0 == aa[i][j])
//将满足要求的下标记录到list中,第一个横坐标,第二个竖坐标
list.add(new int[]{i, j});
}
}
//遍历记录坐标的list
for (int i = 0; i < list.size(); i++) {
int[] ints = list.get(i);
int i0 = ints[0];//横坐标
int i1 = ints[1];//竖坐标
//将行全部设置为0
for (int j = 0; j < aa[i0].length; j++) {
aa[i0][j] = 0;
}
//将列全部设置为0
for (int j = 0; j < aa.length; j++) {
aa[j][i1] = 0;
}
}
return aa;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: