Lintcode 737
已知:
给定一个二维数组,求出在二维数组每一行都出现过的一个数字(假定这个数字是唯一的)
示例:
[
[2,5,3],
[3,2,1],
[1,3,5]
]
//返回值为3
思路:
这个问题本身应该难度不高,难点应该也是在于如何把多层循环转换成递归。我们可以假定当前为第一行的第N个数,然后从第二行找有没有相等的数,如果有,则递归至第三层,依次递归到最后一层仍然为有,则该值就是我们所寻找的值了。
代码如下:
public class Solution {
public int FindElements(int[][] Matrix) {
for (int i = 0; i < Matrix[0].length; i++) {
if (search(Matrix[0][i], Matrix, 1)) {
return Matrix[0][i];
}
}
return 0;
}
//三个参数
//第一个是当前的值(也就是第一行的数字遍历)
//第二个是数组,因为需要值的比对,干脆整个数组传递过来
//第三个是当前比对到了第几行(从1开始到最大行数)
private boolean search(int i, int[][] Matrix, int index) {
for (int j = 0; j < Matrix[index].length; j++) {
if (Matrix[index][j] == i) {
//如果到了最后一行还满足条件,返回true,否则递归至下一层
if (index == Matrix.length - 1) {
return true;
} else {
return search(i, Matrix, index + 1);
}
}
}
return false;
}
}
当然啦,代码完成之前我也有考虑过会不会有进一步的时间优化的方法,但是测试通过了,看样子本题本身就是考察的递归类的知识点~
谢谢您的阅读,希望对您有所帮助(๑╹◡╹)ノ”“”