摘要: 9.5 编写一个方法,确定某字符串的所有排列组合。类似leetcode:Permutations解法:跟许多递归问题一样,简单构造法非常管用。假设有个字符串S,以字符序列a1a2a...an表示。终止条件:n=1S=a1,只有一种排列组合,即字符串a1情况:n=2S=a1a2 有两种排列组合a1a2... 阅读全文
posted @ 2014-12-07 23:30 Jessica程序猿 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 9.4 编写一个方法,返回某集合的所有子集。类似leetcode:Subsets解法:解决这个问题之前,我们先要对时间和空间复杂度有个合理的评估。一个集合会有多少子集?我们可以这么计算,生成了一个子集时,每个元素都可以“选择”在或者不在这个子集中。也就是说,第一个元素有两个选择:它要么在集合中,要么... 阅读全文
posted @ 2014-12-07 21:50 Jessica程序猿 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 9.3 在数组A[0...n-1]中,有所谓的魔术索引,满足条件A[i]=i。给定一个有序整数数组,元素值给不相同,编写一个方法,在数组A中找出一个魔术索引,若存在的话。进阶:如果数组元素有重复值,又该如何处理。?解法一,选择蛮力法,我们可以直接迭代访问整个数组,找出符号条件的元素。int magi... 阅读全文
posted @ 2014-12-07 20:27 Jessica程序猿 阅读(435) 评论(0) 推荐(0) 编辑
摘要: 9.2 设想有个机器人坐在X*Y网格的左上角,只能向右、向下移动。机器人从(0,0)到(X,Y)有多少种走法?进阶:假设有些点为“禁区”,机器人不能踏足。设计一种算法,找到一条路径,让机器人从左上角移动到右下角。类似leetcode:Unique Paths和Unique Paths II解法:我们... 阅读全文
posted @ 2014-12-07 18:46 Jessica程序猿 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 9.1 有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一个方法,计算小孩有多少种上楼梯的方法。解法:我们可以采用自上而下的方式来解决这个问题。小孩上楼梯的最后一步,也就是抵达第n阶的那一步,可能走1阶、2阶或3阶。也就是说,最后一步可能是从第n-1阶往上走1阶、从n-2阶往... 阅读全文
posted @ 2014-12-07 16:11 Jessica程序猿 阅读(374) 评论(0) 推荐(0) 编辑
摘要: 7.7 有些数的素因子只有3、5、7,请设计一个算法,找出其中第k个数。解法:首先,我们可以将满足条件的前几个数列出来,以此寻找解题思路。一种简单的思路就是对于已经列出的数,我们依次去乘以3,5,7得到一组数 然后找出最小且还没有列出的数,加入到这个列表。然后重复上面的步骤: 乘以3,5,7,找出最... 阅读全文
posted @ 2014-12-07 11:30 Jessica程序猿 阅读(294) 评论(0) 推荐(0) 编辑
摘要: 7.6 在二维平面上,有一些点,请找出经过点数最多的那条线。解法:类似于leetcode:Max Points on a Line我们只需在任意两点之间“画”一条无限长的直线(也即不是线段),并利用散列表追踪哪条直线出现的次数最多。这种做法的时间复杂度O(n^2),因为一共有n^2条线段。通过将每一... 阅读全文
posted @ 2014-12-07 11:00 Jessica程序猿 阅读(269) 评论(0) 推荐(0) 编辑
摘要: 7.5 在二维平面上,有两个正方形,请找出一条直线,能够将这两个正方形对半分。假定正方形的上下两条边与x轴平行。解法:要将两个正方形对半分,这条线必须连接两个正方形的中心点。利用slope=(y1-y2)/(x1-x2)就能算出斜率。以两个中心点算出斜率后,就能以同一公式求得线段的起点和终点。 阅读全文
posted @ 2014-12-07 10:44 Jessica程序猿 阅读(147) 评论(0) 推荐(0) 编辑