阿里0323笔试 嗯。。

阿里笔试感觉思路都挺对的,但是就是ac不了,全是0。。难道是因为read没有读好么,代码贴上了求大家帮忙瞅瞅+指正

再次声明 -- 不是正确答案 不是正确答案 不是正确答案
以防误人子弟

第一题 感觉更像数学题,求排列组合。在n个人中可以取任意数目的人数组成一队,并且可以在其中选队长,问一共有多少种组合方式,最后的结果模10^9+7.
def comb(m,n):
    child = 1
    mom = 1
    for i in range(n, n-m, -1):
        child *= i
    for j in range(1, m):
        mom *= j
    return child / mom

def calculateCombination(n):
    result = 0
    for i in range(1, n+1):
        result += comb(i,n)
    return result %(10**9 + 7)

n = int(input())
result = calculateCombination(n)
print(int(result))

第二题 求走的最短路径,一个matrix,S表示start,E表示目的地,剩下的“#“ 表示障碍,”.“表示可以通过,求可以从S到E的最短路径,没有就输出-1.
用了DFS+visited set的方法,不过在本地IDE也没跑出来,有bug。。。刚刚又调试半天没调出来。。。先发出来吧
补充:服气了,应该对角的时候(n-1-x, m-1-y)跑了几个test case都过了
class Solution:

    def getSandE(self, matrix, n, m):
        for i in range(n):
            for j in range(m):
                if matrix[i][j] == "S":
                    S = [i,j]
                if matrix[i][j] == "E":
                    E = [i,j]
        return (S, E)

    def getSteps(self, S, E, matrix, n, m):
        self.result = float("inf")
        visited = set()
        visited.add((S[0], S[1]))
        self.helper(S, E, matrix, n, m, 0, 5, visited)
        print("here")
        print(self.result)
        return self.result


    def helper(self, S, E, matrix, n, m, current, flightLeft, visited):
        if S == E:
            print("find!!!")
            print(current, self.result)
            self.result = min(self.result, current)
            return
        
        print(visited)
        print("*********")
        position = [[1,0], [-1,0], [0,-1], [0,1]]
        for [delta_x, delta_y] in position:
            newX = S[0] + delta_x
            newY = S[1] + delta_y
            if self.isValid(newX, newY, matrix, n, m, visited):
                current += 1
                visited.add((newX, newY))
                self.helper([newX, newY], E, matrix, n, m, current, flightLeft, visited)
                visited.remove((newX, newY))
                current -= 1
        
        if flightLeft > 0:
            newX = n-1-S[0]
            newY = m-1-S[1]
            if self.isValid(newX, newY, matrix, n, m, visited):
                current += 1
                flightLeft -= 1
                visited.add((newX, newY))
                self.helper([newX, newY], E, matrix, n, m, current, flightLeft, visited)
                visited.remove((newX, newY))
                flightLeft += 1
                current -= 1
        

    def isValid(self, x, y, matrix, n, m, visited):
        if x<0 or x>=n or y<0 or y>=m or matrix[x][y] == "#" or (x,y) in visited:
            return False
        return True

matrix = [["#", "S", ".", "."], ["E", "#", ".", "."], ["#", ".", ".", "."], [".", ".", ".", "."]]
s = Solution()
(S, E) = s.getSandE(matrix, 4, 4)
result = s.getSteps(S, E, matrix, 4, 4)
if result == float("inf")":
    print(-1)
else:
    print(result)



#阿里笔试2020##阿里巴巴##笔试题目#
全部评论
贴一下 题一 快速幂求模的python解法 def fastExpMod(a, b, mod):     ans = 1     base = a % mod     while(b != 0):         if(b&1 == 1):             ans = (ans * base) % mod         base = (base * base) % mod         b >>= 1     return ans def main():     mod = 1e9+7     n = int(input())     ans = n * fastExpMod(2, n-1, mod) % mod     print(ans)
点赞 回复 分享
发布于 2020-03-25 16:39
 第二题我和你的想法一样诶,感觉没什么毛病...另外我想问一下这些数据都是要从input读入吗?还是像LeetCode那样...菜鸡太难了
点赞 回复 分享
发布于 2020-03-24 10:44
第一题:1.解法就错了,2.考虑一下二项式定理 可以先这样想,假设队长已经指定,就是a,那么围绕a建队有多少种方法?设这个结果是k,那么总共有kn种建队法。然后就是想办法求k就可以了,这很简单
点赞 回复 分享
发布于 2020-03-23 20:57
第一题和我差不多,虽然知道肯定不会那么简单,但也没想到这样做会错在哪
点赞 回复 分享
发布于 2020-03-23 20:49

相关推荐

今天周一休息,突发奇想写一篇阶段总结。如题,我已经去了一个和Java彻底毫无关联的行业。曾经我以为自己能在计算机行业发光发热,没想到刚入行一年多就当了逃兵。从最开始的热爱到现在一看到代码就厌恶,不知道自己经历了什么。所以我去干什么了?答案是:在成都当了租房销售。上班那会压力大了就念叨着去干租房中介,但是一直下不去这个决心,想着自己学了四年多的计算机知识,终究还是不甘心。终于在某一天准备八股文的时候,看着无数篇和工作内容关系不大的理论知识,那一刻下定决心,决定尝试一下销售行业,也算是给自己一个交代。后面阴差阳错的投了成都自如去当租房管家,没想到面试很顺利,在当天一百多个面试的人里面,我成为了为数不多通过的几个幸运儿之一。目前已经培训通过,正式入职,也开了单,也有压力但是每天过得很开心,真心喜欢那种和人交流的感觉,哪怕是最后没有选择找我租房。说这些也是想告诉那些大三,大四正在找Java实习而焦虑的同学:你们现在还年轻,选择很多,容错率也很高,可以尽情去尝试自己喜欢的行业和工作。不用因为某一次的面试没通过或者简历石沉大海而焦虑,更不用因为身边人都在挤编程的独木桥就强迫自己跟风。也算是自己的碎碎念吧,也希望自己能在新的领域取得一点小成就。也祝牛油工作顺利!
沉淀小子:干啥都不丢人啊,生存是必须要的,销售很考验一个人综合素质能力的,好的销售人脉和资源可不比写字楼的白领差啊
点赞 评论 收藏
分享
评论
点赞
12
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务