avatar
w*4
2
娃都快四岁了,可是大部分时间还是要人陪着玩,有时候我想我做饭,也让他自己习惯
习惯自己玩,自己focus在什么东西上,才能发展智力嘛,可是常常是我在厨房做饭,
他一会一叫,开着风扇也听不清楚,他还是老叫,要么就老问我什么时候能跟他玩。都
是他爸爸回家了,他特别高兴,开始他爸陪玩。他动手能力也不行,画画涂颜色不喜欢
,有时候瞎玩橡皮泥,有时候能玩会剪纸(瞎剪),玩会浆糊,贴纸,LEGO那真是瞎拼
啊,按出来的四不像,感觉他真是不行,教吧他都不坐下来,坐下来也不听讲,请教下
该怎么办呢
avatar
F*r
3
dancing links

【在 s**x 的大作中提到】
: 这次 onsite 就这一题没做好。
avatar
a*w
4
大了就好了。

【在 w*****4 的大作中提到】
: 娃都快四岁了,可是大部分时间还是要人陪着玩,有时候我想我做饭,也让他自己习惯
: 习惯自己玩,自己focus在什么东西上,才能发展智力嘛,可是常常是我在厨房做饭,
: 他一会一叫,开着风扇也听不清楚,他还是老叫,要么就老问我什么时候能跟他玩。都
: 是他爸爸回家了,他特别高兴,开始他爸陪玩。他动手能力也不行,画画涂颜色不喜欢
: ,有时候瞎玩橡皮泥,有时候能玩会剪纸(瞎剪),玩会浆糊,贴纸,LEGO那真是瞎拼
: 啊,按出来的四不像,感觉他真是不行,教吧他都不坐下来,坐下来也不听讲,请教下
: 该怎么办呢

avatar
r*l
5
backtracking经典题
avatar
N*O
6
如果没猜错的话,问题一半在于你。
“他动手能力也不行,画画涂颜色不喜欢,有时候瞎玩橡皮泥,有时候能玩会剪纸(瞎
剪),玩会浆糊,贴纸,LEGO那真是瞎拼啊,按出来的四不像,感觉他真是不行,教吧
他都不坐下来,坐下来也不听讲,请教下该怎么办呢”
看了这段文字,我脑子里想到的情景是:
一个男孩在努力的拼Lego,当然因为接触时间不长,没有太好的手部技巧,也没有太好
的空间想象力,但是他在follow自己做一些东西,因为是自己的尝试,所以还觉得蛮好
玩的。这时候一个妈妈出现了,嘿,你怎么这样拼呢?!不是应该这样,这样,这样?
男孩想想也是,想follow妈妈的建议,但是自己试了几下好像不行啊。男孩心里有点着
急了。但是这时候妈妈更着急了。把做菜的手一擦,嘿,过来,做好,妈妈貌似很有耐
心循循善诱,想把自己的经验灌输给男孩。而男孩呢?因为先前已经着急了,这时候有
怎么能安静的听妈妈“罗嗦”?然后妈妈就生气了,嘿,我花时间,花了心思,来训练
你,你怎么能不认真听呢?一生气,言语行动就表现出来了,男孩呢?多半就叛逆逃避
罗。最后妈妈得出结论“感觉他真是不行,教吧他都不坐下来,坐下来也不听讲”。男
孩呢?觉得Lego不好玩,让他挨训了。
这样的情景应该发生在男孩做的很多事情上,画画、涂颜色、剪纸(瞎剪)、浆糊、贴
纸。。。。。。
渐渐的,小孩失去了很多自信,他觉得自己什么都做不好,所以他需要爸爸妈妈陪在身
边,他才能玩好这些东西,才能玩的开心。
大概示范一些东西,然后让孩子自己去玩吧,行也罢不行也罢,你指望小孩能玩出什么
来呢?等他需要帮助的时候,再过去帮上一步两步。这样,每天都能看到他有一点点进
步就好了,下一次在这个进步的基础上示范新的东西。
一个善意的提醒,希望不是我想象的这样。
avatar
l*a
7
恩,网上曾经贴过详解的。
depth-first-search,现场写有点难度。
avatar
w*4
8
这个爸爸说的挺好的,我们可能过多地打断他自己尝试思考的过程了,我有时候的确是
想,孩子一个人玩,我就在旁边,不跟他说话互动有点冷落孩子(我也认为孩子应该自
己琢磨思考,就是这个界限不知道怎么设定),互动的话就是告诉他“这个是这样玩”
,结果就这样了。那么就是我在旁边,等他来问我好了,别的啥也不说啥也不做?以前
我还老生气娃他爹看孩子真就是“看着”,看来真不该这样?
avatar
g*y
9
写了个最原始的,一点智能都没有的:
public class Sudoku {
private int[] t = new int[9];
public boolean solve(int[][] matrix) {
Point p = nextUnknown(matrix);
if (p == null) {
print(matrix);
return true;
}

for (int i=1; i<10; i++) {
matrix[p.x][p.y] = i;
if (pass(matrix) && solve(matrix)) return true;
}

matrix[p.x][p.y] = 0;
return false;
}

private Point nextUnknown(int[][] matrix) {
for (int i=0; i<9; i++) {
for (int j=0; j<9; j++) {
if (matrix[i][j] == 0) return new Point(i, j);
}
}
return null;
}

private boolean pass(int[][] matrix) {
for (int i=0; i<9; i++) {
clearTest();
for (int j=0; j<9; j++) {
int a = matrix[i][j];
if (a > 0) {
t[a-1]++;
if (t[a-1] > 1) return false;
}
}
}

for (int i=0; i<9; i++) {
clearTest();
for (int j=0; j<9; j++) {
int a = matrix[j][i];
if (a > 0) {
t[a-1]++;
if (t[a-1] > 1) return false;
}
}
}

for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
clearTest();
for (int x=0; x<3; x++) {
for (int y=0; y<3; y++) {
int a = matrix[3*i+x][3*j+y];
if (a > 0) {
t[a-1]++;
if (t[a-1] > 1) return false;
}
}
}
}
}

return true;
}

private void clearTest() {
for (int i=0; i<9; i++) t[i] = 0;
}

private void print(int[][] matrix) {
for (int i=0; i<9; i++) {
for (int j=0; j<9; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
}

private class Point {
int x;
int y;

public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
}
avatar
w*e
10
问题出在这里了在;"自己focus在什么东西上,才能发展智力嘛"
智商本来就有很多种,学习方法有很多种。
我觉得孩子总有一天会自己想做自己的事情的,不让大人干扰的。在这之前就是大人引
领孩子的最有效时期。
四岁的孩子可以跟大人在厨房做事了吧。我小时候,爸妈给买了一个很漂亮的围裙,想
戴就要在厨房做事,洗洗涮涮摘摘,可以干的事就扔给我干,干不好我妈就教,或者我
看着我妈飞快地做完,没什么事,我就蹲在地上看蚂蚁(厨房有蚂蚁窝),或者我妈领
着我背背儿歌,出个谜语,我听我妈唱歌,或者我爸也在厨房的时候,我听他们聊天。
大一点以后就可以切些东西了。自己动手参与做的东西,自己也更愿意吃了。厨房里孩
子可以学到很多常识和技能。很多生活上的safety awareness, fine motor skills
和 planning skills 都是在厨房帮忙的时候得到的启蒙。孩子是善于观察的,我觉得这个时候如果可以让他参与更多大人的
活动,他可以自己观察到很多有用的东西,比你直接高诉他这个东西怎么玩,要有效多了。
avatar
i*e
11
这题作为面试题应该考察的就是基础 DFS 和 coding skills,如果要智能的话在面试那么短的时间内是写不出来的。
这题思路不难的,只是 coding 方面要注意,不要出错就行。基本思路就是先实现 isValid() 函数,检测这个 board 是否valid。然后,找出第一个空格内填 1-9,如果 isValid() 的话继续 DFS,直到没有空格为止(那就是找到答案了)。要注意函数返回之前把空格还原。
这个函数:
private boolean pass(int[][] matrix)
里面用了一些重复的代码,可以 refactor 成更简洁些,也可以减少错误发生的机率:
private boolean passHelper(int [][] matrix, int startRow, int startCol, int
endRow, int endCol)
这样你在 pass 函数里只要传叫 passHelper() 三次即可。
1)startRow = 0, startCol = col, endRow = 8, endCol = col { for col = 0->8 }
2) startRow = row, startCol = 0, endRow = row, endCol = 8 { for row = 0->8
}
3) startRow = row, startCol = col, endRow = row+2, endCol = col+2 { for row
= 0->2, col = 0->2 }
也说下复杂度:
DFS 暴力解法的复杂度应该是 O(9^n),n = 空格的个数。
那么为什么以下的 board,在电脑运行暴力 DFS 一秒以内就找出答案?
"1...7..3.",
"83.6.....",
"..29..6.8",
"6....49.7",
".9.....5.",
"3.75....4",
"2.3..91..",
".....2.43",
".4..8...9"
原因是因为这个条件 (请参考 gloomyturkey 的代码):
if (pass(matrix) && solve(matrix))
当这个 board 不是 valid 的时候,就没必要搜索下去了。这个简单的剪枝方法可以大
大的缩小搜索的范围。如果你不相信的话,把 pass(matrix) 这个条件去掉,然后只有
在填满 board 的时候再检测是否 valid,那么你这个 DFS 是跑了一百年都不会有答案
的。(以上的 board , n = 51, 复杂度 = 9^51 = 4.63839769 × 10^48)
一些常见面试题的答案与总结 -
http://www.ihas1337code.com

【在 g**********y 的大作中提到】
: 写了个最原始的,一点智能都没有的:
: public class Sudoku {
: private int[] t = new int[9];
: public boolean solve(int[][] matrix) {
: Point p = nextUnknown(matrix);
: if (p == null) {
: print(matrix);
: return true;
: }
:

avatar
c*t
12
ihasleetcode,
这个sodoku solver到底是什么个问题?
是说生成所有的sodoku的9*9矩阵?那样的组合可就太多了。
还是说给了一个没有填满的9*9矩阵,解决去填空缺的数字?
还是说给了一个填满的9*9矩阵,判断是不是个有效的solution?
到底是这三者中的哪一个?
谢谢!

试那么短的时间内是写不出来的。
isValid() 函数,检测这个 board 是否valid。然后,找出第一个空格内填 1-9,如果
isValid() 的话继续 DFS,直到没有空格为止(那就是找到答案了)。要注意函数返
回之前把空格还原。
int
8 }
>8

【在 i**********e 的大作中提到】
: 这题作为面试题应该考察的就是基础 DFS 和 coding skills,如果要智能的话在面试那么短的时间内是写不出来的。
: 这题思路不难的,只是 coding 方面要注意,不要出错就行。基本思路就是先实现 isValid() 函数,检测这个 board 是否valid。然后,找出第一个空格内填 1-9,如果 isValid() 的话继续 DFS,直到没有空格为止(那就是找到答案了)。要注意函数返回之前把空格还原。
: 这个函数:
: private boolean pass(int[][] matrix)
: 里面用了一些重复的代码,可以 refactor 成更简洁些,也可以减少错误发生的机率:
: private boolean passHelper(int [][] matrix, int startRow, int startCol, int
: endRow, int endCol)
: 这样你在 pass 函数里只要传叫 passHelper() 三次即可。
: 1)startRow = 0, startCol = col, endRow = 8, endCol = col { for col = 0->8 }
: 2) startRow = row, startCol = 0, endRow = row, endCol = 8 { for row = 0->8

avatar
h*n
13
2 of course

率:
->
0-

【在 c*********t 的大作中提到】
: ihasleetcode,
: 这个sodoku solver到底是什么个问题?
: 是说生成所有的sodoku的9*9矩阵?那样的组合可就太多了。
: 还是说给了一个没有填满的9*9矩阵,解决去填空缺的数字?
: 还是说给了一个填满的9*9矩阵,判断是不是个有效的solution?
: 到底是这三者中的哪一个?
: 谢谢!
:
: 试那么短的时间内是写不出来的。
: isValid() 函数,检测这个 board 是否valid。然后,找出第一个空格内填 1-9,如果

avatar
c*t
14
如果是2的话,
如果给定的数很少,就是说这个矩阵很稀疏,那么solution有可能会有很多种,答案不
是唯一的,对吧?

【在 h*********n 的大作中提到】
: 2 of course
:
: 率:
: ->
: 0-

avatar
A*M
15
我的理解是sodoku solver应该包含如下两部分
1)生成一个合理的sodoku,使27个区(9行9列9个3*3)都满足条件
2)去掉一些number产生一个合理的puzzle, 不会产生多解的情况。
网上搜一下, 有很多这方面的讨论。
avatar
i*e
16
是填满空缺的数字.
>>如果给定的数很少,就是说这个矩阵很稀疏,那么solution有可能会有很多种,答案
不是唯一的,对吧?
假设只有唯一一个答案。
另外,如果有兴趣的话,可以参考 Peter Norvig 写的有关 sudoku solver 文章(里
面还介绍了怎么生成一个 sudoku puzzle,附有完整代码)。
从他那里转载:
What is the search algorithm? Simple: first make sure we haven't already
found a solution or a contradiction, and if not, choose one unfilled square
and consider all its possible values. One at a time, try assigning the
square each value, and searching from the resulting position. In other words
, we search for a value d such that we can successfully search for a
solution from the result of assigning square s to d. If the search leads to
an failed position, go back and consider another value of d. This is a
recursive search, and we call it a depth-first search because we (
recursively) consider all possibilities under values[s] = d before we
consider a different value for s.
一些常见面试题的答案与总结 -
http://www.ihas1337code.com

【在 c*********t 的大作中提到】
: ihasleetcode,
: 这个sodoku solver到底是什么个问题?
: 是说生成所有的sodoku的9*9矩阵?那样的组合可就太多了。
: 还是说给了一个没有填满的9*9矩阵,解决去填空缺的数字?
: 还是说给了一个填满的9*9矩阵,判断是不是个有效的solution?
: 到底是这三者中的哪一个?
: 谢谢!
:
: 试那么短的时间内是写不出来的。
: isValid() 函数,检测这个 board 是否valid。然后,找出第一个空格内填 1-9,如果

avatar
h*k
17
说到唯一解,有这么个问题。
在给定的数满足什么条件下,sudoku有而且仅有一个解?

square

【在 i**********e 的大作中提到】
: 是填满空缺的数字.
: >>如果给定的数很少,就是说这个矩阵很稀疏,那么solution有可能会有很多种,答案
: 不是唯一的,对吧?
: 假设只有唯一一个答案。
: 另外,如果有兴趣的话,可以参考 Peter Norvig 写的有关 sudoku solver 文章(里
: 面还介绍了怎么生成一个 sudoku puzzle,附有完整代码)。
: 从他那里转载:
: What is the search algorithm? Simple: first make sure we haven't already
: found a solution or a contradiction, and if not, choose one unfilled square
: and consider all its possible values. One at a time, try assigning the

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。