• 2018秋招小红书算法方向在线编程题


    代码如下:

    class TreeNode:
        def __init__(self, x):
            self.left=None
            self.right=None
            self.value=x
    
    def BuildTree(ceng, zhong):
        if len(ceng)==0:
            return None
        if len(ceng)==1:
            return TreeNode(ceng[0])
        else:
            flag=TreeNode(ceng[0])
            root=ceng[0]
            zong=zhong[:zhong.index(ceng[0])]
            cen=[]
            for i in ceng:
                if i in zong:
                    cen.append(i)
            flag.left=BuildTree(cen,zong)
            cen = []
            zong=zhong[zhong.index(ceng[0])+1:]
            for i in ceng:
                if i in zong:
                    cen.append(i)
            flag.right=BuildTree(cen,zong)
            return flag
    
    
    def PrintLeafNode(root,node):
        if root==None:
            return
        if root.left==None and root.right==None:
            node.append(root.value)
        PrintLeafNode(root.left, node)
        PrintLeafNode(root.right, node)
    
    
    def PreTravel(root,node):
        if root==None:
            return
        node.append(root.value)
        PreTravel(root.left, node)
        PreTravel(root.right, node)
    
    
    def BackTravel(root, node):
        if root==None:
            return
        BackTravel(root.left, node)
        BackTravel(root.right, node)
        node.append(root.value)
    
    
    
    ceng=input().strip().split(" ")
    zhong=input().strip().split(" ")
    root=BuildTree(ceng, zhong)
    leaf=[]
    pre=[]
    back=[]
    PrintLeafNode(root, leaf)
    PreTravel(root, pre)
    BackTravel(root, back)
    print(" ".join(leaf))
    print(" ".join(pre))
    print(" ".join(back))

     第二题:

    代码如下:

    def ac(list1):
        if len(list1)==1:
            return 1
        count = 0
        for i in range(len(list1)):
    
            if i == 0:
                pre = 0
                back = int("".join(list1[i + 1:])) + 1
            elif i == len(list1) - 1:
                pre = int("".join(list1[:i]))
                back =1
            else:
                pre = int("".join(list1[:i]))
                back = int("".join(list1[i + 1:])) + 1
            if list1[i] == '0':
                length = len(list1) - i - 1
                tmp = (pre * (10 ** length))
                count += tmp
            elif list1[i] == '1':
                length = len(list1) - i - 1
                tmp = (pre * (10 ** length))
                count += tmp
                count += (back)
            else:
                length = len(list1) - i - 1
                k = pre + 1
                tmp = k * (10 ** length)
                count += tmp
        return count
    
    list1=list(input().strip())
    print(ac(list1))
  • 相关阅读:
    c学习第3天
    [BZOJ2124] 等差子序列
    CF710F String Set Queries
    Cow Hopscotch (dp+树状数组优化)
    CF528D Fuzzy Search (bitset)
    Gym 101667L Vacation Plans (dp)
    Codeforces 432D Prefixes and Suffixes (kmp+dp)
    [题解]BZOJ2115 XOR
    洛谷 P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
    从中国矢量图筛选出江苏省行政区划图
  • 原文地址:https://www.cnblogs.com/tsdblogs/p/9672129.html
Copyright © 2020-2023  润新知