一道 Google 竞赛题的解法

2016-01-29 12:16 12 1 收藏

一道 Google 竞赛题的解法,一道 Google 竞赛题的解法

【 tulaoshi.com - C语言心得技巧 】

一道 Google 竞赛题的解法

作者:roc

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

下载源代码

  本人于2005年12月13日凌晨参加了google中国编程挑战赛的入围阶段的赛事。虽然最终我感觉自己做出了这道级别为high到mid间的赛题,但是却发现那时入围赛事早已经结束了......
  相信 vckbase 中的不少朋友肯定也参加了那场入围赛,所以我打算把自己的解法写出来,一则虽然题目中的测试用例是全部通过了,但这并不能保证我的解法是正确的,希望大家批评指教;二则相信其他朋友也一定有更好的解法大家一起讨论讨论。希望,这篇文章能起到抛砖引玉的效果。

一、竞赛题目

Problem Statement You are given a String[] grid representing a rectangular grid of letters. You are also given a String find, a word you are to find within the grid. The starting point may be anywhere in the grid. The path may move up, down, left, right, or diagonally from one letter to the next, and may use letters in the grid more than once, but you may not stay on the same cell twice in a row (see example 6 for clarification).You are to return an int indicating the number of ways find can be found within the grid. If the result is more than 1,000,000,000, return -1.DefinitionClass:WordPathMethod:countPathsParameters:vector < string >, stringReturns:intMethod signature:int countPaths(vector < string> grid, string find)(be sure your method is public)Constraints-grid will contain between 1 and 50 elements, inclusive.-Each element of grid will contain between 1 and 50 uppercase (''A''-''Z'') letters, inclusive.-Each element of grid will contain the same number of characters.-find will contain between 1 and 50 uppercase (''A''-''Z'') letters, inclusive.Examples0){"ABC","FED","GHI"}"ABCDEFGHI"Returns: 1There is only one way to trace this path. Each letter is used exactly once.1){"ABC","FED","GAI"}"ABCDEA"Returns: 2Once we get to the ''E'', we can choose one of two directions for the final ''A''.2){"ABC","DEF","GHI"}"ABCD"Returns: 0We can trace a path for "ABC", but there''s no way to complete a path to the letter ''D''.3){"AA","AA"}"AAAA"Returns: 108We can start from any of the four locations. From each location, we can then move in any of the three possible directions for our second letter, and again for the third and fourth letter. 4 * 3 * 3 * 3 = 108.4){"ABABA","BABAB","ABABA","BABAB","ABABA"}"ABABABBA"Returns: 56448There are a lot of ways to trace this path.5){"AAAAA","AAAAA","AAAAA","AAAAA","AAAAA"}"AAAAAAAAAAA"Returns: -1There are well over 1,000,000,000 paths that can be traced.6){"AB","CD"}"AA"Returns: 0Since we can''t stay on the same cell, we can''t trace the path at all.This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2003, TopCoder, Inc. All rights reserved.
  题目的意思大致是这样的:在类 WordPath 中编写一个原型为:
int countPaths(vector < string grid, string find)

的函数,grid相当于一个字母矩阵,grid中的每个字符串含有相同个数的字母,这些字母都是大写的字母,从''A''到''Z'',grid中字母个数的范围是1-50。参数find是要求你在grid中搜索路径的字符串,其同样只含有''A''到''Z''的字符,其个数范围同样是1-50。搜索起点可以从grid中的任何一点开始,然后可以向上,向下,向左,向右,以及对角线移动一格。grid中的每个位置的字母可以多次使用。但路径不能在相同位置停留两次(见用例6)。返回值是个整型数据,表示搜索到的路径总数数。如果这个数值大于1,000,000,000, 则返回-1。

二、我的解题步骤

第一步.使用人脑按照题目要求,实际计算一遍。

  这里先用例1为例。在例1的find字符串的第一个字符是''A'',我们可以看到在相应的grid中,''A''在两个位置上出现,由于起点不限,所以我们搜索到的起点有2个;find的第2个字符是B,我们可以看到grid中只出现了1个B,而按照题目要求移动的话,显然只有左上角的那个A可以移动到这个B的位置。我们以次类推一值移动到E,都是唯一一条路经,但最后一个字符还是A,这时按照题目要求,2个A都可以从E移动到达,并且题目也说明每个位置可以多次移动停留,所以这时2个A都符合条件。

来源:http://www.tulaoshi.com/n/20160129/1485365.html

延伸阅读
每个人都希望自己的身材棒棒的,这样自己也会变得自信起来,同时,还会远离一些“富贵病”。那么到底如何瘦身才是最有效的呢?中医瘦身的效果好不好呢?中医瘦身的方法有哪些呢?一起来看看吧。 目录 1、老中医支招拔罐瘦身 2、中药瘦身 3、中医针灸瘦身法 4、中药瘦身汤 5、中药瘦身茶 6、中医按摩瘦身 ...
标签: 孕前准备
猪血,味甘、苦,性温,有解毒清肠、补血美容的功效。猪血富含维生素B2、维生素C、蛋白质、铁、磷、钙、尼克酸等营养成分。 猪血中的血浆蛋白被人体内的胃酸分解後,产生一种解毒、清肠分解物,能够与侵入人体内的粉尘、有害金属微粒发生化合反应,易於毒素排出体外。研究表明,不少食物对精子、卵子的质量有不良影响。所以,小编在...
一道汤解决男人肾上问题 很多男人都面临着需要补肾的情况,大家都知道男人一旦肾不好,就会有各种不适,生活没有了活力,夫妻感情也会受到影响,关键就是男人自己信心受挫,身体无力,所以男人补肾才是关键,那么有哪些能够帮助男人补肾的食物呢?下面就随图老师小编一起来看看对男人好的补肾汤有哪些吧! 一道汤最补男...
十类中成药 孕妇要小心 俗话说,是药三分毒.中成药对于孕妇也并不是都无害的,其中有十类中成药不宜用. 一、清热类: 具有清热解毒、泻火、祛湿等功效的中成药。如六神丸在孕早期服用可能引发胎儿畸形,孕后期服用易致儿童智力低下等后果。而含有牛黄等成分的中成药,因其攻下、泻下之力较强易致孕妇流产,如牛黄解毒丸、片仔癀、犀黄丸、败...
标签: 心理健康
就拿美孚石油的创始人约翰·洛克菲勒的人生经历来说,便是一个善于进退的典范。这位美国的大亨,在52岁以前,以透支健康的拼命三郎劲头工作。 我们的先人用字遣句,颇有哲理,细细品味,得益良多。比如:勇往直前,克服诸多困难,获得一定成绩,这叫“进步”;如果面前困难太大,无力攻克,索性主动放弃,返回再寻新的目标,这叫“退一步,...

经验教程

898

收藏

76
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部