avatar
steam clean# Living
h*b
1
一个amazon的算法题描述如下(在以前的面经里面看到的):
boggle游戏的问题:给定一个4*4的矩阵,每个
位置有一个字母,可以从一个位置跳转到周围八个相邻位置中的任何一个,但不能跳到
已经访问过的位置,要求找出所有的单词(假设给定了一个词典)。
这个题目感觉下code的话很难写的啊? 如何用DFS或者递归的话 如何避免访问重发的
元素了或者避免Loop. 还有的话用用DFS的如何构造图呢? 感觉DFS找一个valid word
比较容易, 找出所有的words 感觉太复杂了。大家有什么简洁的算法?。谢谢了 。。
avatar
A*A
2
房子马上要close了,master suite是地毯,然后地下室是地毯,其他地方都是砖和木
地板的。 本来准备换master的地毯的,seller跟我说他们这个地毯是wool的,看着是
很不错,我想等段时间要换也换木地板(目前没米)。准备steam clean一下,但是不
知道是请人来clean还是自己买机器。 如请人来,有什么推荐的吗?如果买,那个牌子
好呀?
多谢!~
avatar
g*y
3
递归 和DFS没什么关系

word

【在 h****b 的大作中提到】
: 一个amazon的算法题描述如下(在以前的面经里面看到的):
: boggle游戏的问题:给定一个4*4的矩阵,每个
: 位置有一个字母,可以从一个位置跳转到周围八个相邻位置中的任何一个,但不能跳到
: 已经访问过的位置,要求找出所有的单词(假设给定了一个词典)。
: 这个题目感觉下code的话很难写的啊? 如何用DFS或者递归的话 如何避免访问重发的
: 元素了或者避免Loop. 还有的话用用DFS的如何构造图呢? 感觉DFS找一个valid word
: 比较容易, 找出所有的words 感觉太复杂了。大家有什么简洁的算法?。谢谢了 。。

avatar
C*d
4
Hoover SteamVac
avatar
R*i
5
My solution:
prefix tree to store all words in dictionary
for each cell in matrix
do BFS
add to BFS queue only if partial_word can be found in prefix tree and
unvisited
O(n^2) solution, may not be optimal, but guarantee to work.
avatar
p*b
6
I think you can also rent one from grocery store or HD.
avatar
g*k
7
个人感觉这就是纯递归的算法题

word

【在 h****b 的大作中提到】
: 一个amazon的算法题描述如下(在以前的面经里面看到的):
: boggle游戏的问题:给定一个4*4的矩阵,每个
: 位置有一个字母,可以从一个位置跳转到周围八个相邻位置中的任何一个,但不能跳到
: 已经访问过的位置,要求找出所有的单词(假设给定了一个词典)。
: 这个题目感觉下code的话很难写的啊? 如何用DFS或者递归的话 如何避免访问重发的
: 元素了或者避免Loop. 还有的话用用DFS的如何构造图呢? 感觉DFS找一个valid word
: 比较容易, 找出所有的words 感觉太复杂了。大家有什么简洁的算法?。谢谢了 。。

avatar
k*t
8
rug doctor is the way to go

【在 A*A 的大作中提到】
: 房子马上要close了,master suite是地毯,然后地下室是地毯,其他地方都是砖和木
: 地板的。 本来准备换master的地毯的,seller跟我说他们这个地毯是wool的,看着是
: 很不错,我想等段时间要换也换木地板(目前没米)。准备steam clean一下,但是不
: 知道是请人来clean还是自己买机器。 如请人来,有什么推荐的吗?如果买,那个牌子
: 好呀?
: 多谢!~

avatar
b*n
9
#define N 4
void FindWordsBoggle(char board[][N])
{
int i=0,j=0;
char* outStr = (char*) malloc((N*N+1)*sizeof(char));
int* occupMap = (int*) calloc((N*N),sizeof(int));
int level = 0;
RecursiveBoggle(board, outStr, level, occupMap);
free(occupMap);
free(outStr);
}
void RecursiveBoggle(char board[][N], char* outStr, int level, int*
occupMap)
{
int* occupMapCopy = (int*) malloc((N*N)*sizeof(int));
memcpy(occupMapCopy, occupMap, N*N*sizeof(int));
int i=0,j=0;
for ( ; i < N; i++)
{
for (; j < N; j++)
{
if (!occupMapCopy[i*N+j])
{
outStr[level] = board[i][j];
outStr[level+1] = '\0';
/*Find whether the current string is available as a word.*/
if (FindInDictionary(outStr))
printf("%s\n",outStr);
if (FindPrefixInDictionary(outStr))
{
occupMapCopy[i*N+j] = 2;
/*Label neighbors as traversable*/
LabelNeighbors(occupMapCopy, i, j);
RecursiveBoggle(board, outStr, level+1, occupMapCopy);
}
}
}
}
free(occupMapCopy);
}
void LabelNeighbors(int* occupMap, int i, int j)
{
int ii=0,jj=0;
for (; ii < N; ++ii)
{
for (; jj < N; ++jj)
{
if (occupMap[ii*N+jj] == 2)
/*already used*/
continue;
else if ( abs(ii-i) <=1 && abs(jj-j) <=1 )
/*can be next character*/
occupMap[ii*N+jj] = 0;
else occupMap[ii*N+jj] = 1; /*not reachable*/
}
}
}
avatar
d*e
10
首先要真是纯羊毛地毯,绝对比木地板值钱,不应该换。
其次这儿的人给你出的主意都是清洗化纤地毯的,你的要是纯羊毛,还是找人来干吧。

【在 A*A 的大作中提到】
: 房子马上要close了,master suite是地毯,然后地下室是地毯,其他地方都是砖和木
: 地板的。 本来准备换master的地毯的,seller跟我说他们这个地毯是wool的,看着是
: 很不错,我想等段时间要换也换木地板(目前没米)。准备steam clean一下,但是不
: 知道是请人来clean还是自己买机器。 如请人来,有什么推荐的吗?如果买,那个牌子
: 好呀?
: 多谢!~

avatar
s*y
11
建议学习programming interview expose里的递归章节,练习一下permutation,
combination, coin change, integer partition,这一类的题(本质上是DFS搜索穷举)
你就没问题了。
avatar
s*d
12
wool 就先不要换了,很贵的
请个专业的给洗一下
avatar
f*g
13
这个题递归是没错的。
关键在于字典的结构。
用trie可以在第一时间内判断has_prefix()
然后剪纸
avatar
A*A
14
谢谢大家建议~~ 到哪里去找人来洗wool地毯呀??
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。