当前位置: 首页 > article >正文

《零基础Go语言算法实战》【题目 5-1】按照给定条件构建二叉树

《零基础Go语言算法实战》

【题目 5-1】按照给定条件构建二叉树

给出一个含有不重复整数元素的数组,每个整数均大于 1。用这些整数来构建二叉树,

每个整数可以使用任意次数。其中,每个非叶子节点的值应等于它的两个子节点的值的乘积。

求满足条件的二叉树一共有多少个?返回的结果应模除以 10的9 次方+ 7。

【解答】

① 思路。

首先想到的是暴力解法,先排序,然后遍历所有节点,枚举两两乘积为第 3 个节点值的

组合,然后枚举这些组合并构成树。这里在计数时要注意,左右子树如果不是对称的,则将

左右子树相互对调又是一组解。

② Go 语言实现。

package main

import (

 "fmt"

 "sort"

)

const mod = 1e9 + 7

func countBinaryTrees(arr []int) int {

 dp := make(map[int]int)

 sort.Ints(arr)

 for i, curNum := range arr {

 for j := 0; j < i; j++ {

 factor := arr[j]

 quotient, remainder := curNum/factor, curNum%factor

 if remainder == 0 {

 dp[curNum] += dp[factor] * dp[quotient]

 }

 }

 dp[curNum]++

 }

 totalCount := 0

 for _, count := range dp {

 totalCount += count

 }

 return totalCount % mod

}

func main() {

 arr := []int{1, 6, 8, 99, 88}

 res := countBinaryTrees(arr)

 fmt.Println(res)

}


http://www.kler.cn/a/506768.html

相关文章:

  • 浅谈云计算20 | OpenStack管理模块(下)
  • springcloud中的Feign调用
  • UDP报文格式
  • 02JavaWeb——JavaScript-Vue(项目实战)
  • HCIP-VLAN-hybrid接口+DHCP实验
  • OpenCV相机标定与3D重建(55)通用解决 PnP 问题函数solvePnPGeneric()的使用
  • Android SystemUI——车载CarSystemUI加载(八)
  • Gateway怎么实现限流的
  • HTML中最基本的东西
  • .NET概述
  • [Do374]Ansible一键搭建sftp实现用户批量增删
  • 如何设置请求头模拟浏览器访问?
  • HTML标签笔记
  • 【Golang 面试题】每日 3 题(三十三)
  • 【React】JSX底层处理机制
  • Git 版本控制:.gitignore 文件完全指南
  • 如何制作一个高质量的 Dockerfile 镜像:从入门到实践
  • 【进程与线程】进程的状态
  • AI与药学:大语言模型赋能药物推荐
  • 为什么我喜欢在 CSS 中使用 RegEx
  • npm发布组件(vue3+webpack)
  • Vue学习之旅:从生命周期到工程化开发与组件实践(生命周期+工程化开发)
  • @Query(org.springframework.data.jpa.repository.Query)
  • HTTP 到 HTTPS – 以下是操作步骤
  • 【Java设计模式-5】装饰模式:给咖啡加点“佐料”
  • 海太长江隧道:科技防水筑就跨江新通道