2022-03-27:class AreaResource {
String area; // area表示的是地区全路径,最多可能有6级,比如: 中国,四川,成都 或者 中国,浙江,杭州
String spliter; // 比如:逗号 -> ,
long count; // 表示地区的门店数量
}
现在需要把 List 进行转换,需要做到同级的地域能合并,
比如:area为中国,四川,成都 ,有10个门店;area为中国,浙江,杭州,有25个门店;area为中国,浙江,义乌,有22个门店,
最终生成的JSON字符串为: {“中国”:{“四川”:{“成都”:10]},“浙江”:{“义乌”:22,“杭州”:25}}}。
请实现下面的方法 public String mergeCount(List areas) 。
来自北京北明数科信息技术有限公司。

答案2022-03-27:

自然智慧。前缀树。

代码用golang编写。代码如下:

package main

import (
"fmt"
"strings"
) func main() {
a1 := NewAreaResource("中国,四川,成都", ",", 10)
a2 := NewAreaResource("中国,浙江,杭州", ",", 50)
a3 := NewAreaResource("中国,浙江,杭州", ",", 25)
a4 := NewAreaResource("中国,浙江,义乌", ",", 22)
a5 := NewAreaResource("中国,四川,成都", ",", 15)
a6 := NewAreaResource("中国,四川,攀枝花", ",", 12)
a7 := NewAreaResource("中国,浙江,宁波", ",", 16) areas := make([]*AreaResource, 0)
areas = append(areas, a1)
areas = append(areas, a2)
areas = append(areas, a3)
areas = append(areas, a4)
areas = append(areas, a5)
areas = append(areas, a6)
areas = append(areas, a7) ans := mergeCount(areas) fmt.Println(ans)
} type AreaResource struct {
area string
spliter string
count int
} func NewAreaResource(a string, s string, c int) *AreaResource {
ans := &AreaResource{}
ans.area = a
ans.spliter = s
ans.count = c
return ans
} // 要实现的方法
func mergeCount(areas []*AreaResource) string {
all := NewArea("", 0)
for _, r := range areas {
// 中国,四川,成都 , 10个门店
//path0 := r.area.split(r.spliter)
path0 := strings.Split(r.area, r.spliter)
// 中国 四川 成都
count := r.count
f(path0, 0, all, count)
}
return all.toString()
} // [中国,四川,成都]
// 0 1 2
func f(path0 []string, index int, pre *Area, count int) {
if index == len(path0) {
pre.count += count
} else {
// 前一个节点 pre 中国
// cur = 四川
cur := path0[index]
if _, ok := pre.next[cur]; !ok {
pre.next[cur] = NewArea(cur, 0)
}
f(path0, index+1, pre.next[cur], count)
}
} // 自己定义的!前缀树节点
type Area struct {
// 地区名称:中国
// 四川
// 成都
name string
// 中国 key : 省名 value: 下级节点
next map[string]*Area
count int
} func NewArea(n string, c int) *Area {
ans := &Area{}
ans.name = n
ans.count = c
ans.next = make(map[string]*Area)
return ans
} func (this *Area) toString() string {
ans := make([]byte, 0)
// : ""
// str = "中国":
// str = "成都":100
if this.name != "" {
ans = append(ans, []byte("\""+this.name+"\""+":")...)
}
if len(this.next) == 0 {
ans = append(ans, []byte(fmt.Sprint(this.count))...)
} else {
// "中国":{ 四川如何如何,河南如何如何,江苏如何如何}
//ans.append("{");
ans = append(ans, []byte("{")...)
for _, child := range this.next {
ans = append(ans, []byte(child.toString()+",")...)
}
ans[len(ans)-1] = '}'
}
return string(ans)
}

执行结果如下:


左神java代码

2022-03-27:class AreaResource { String area; // area表示的是地区全路径,最多可能有6级,比如: 中国,四川,成都 或者 中国,浙江,杭州 Str的更多相关文章

  1. 【VSCode】Windows下VSCode编译调试c/c++【更新 2018.03.27】

    --------– 2018.03.27 更新--------- 便携版已更新,点此获取便携版 已知BUG:中文目录无法正常调试 用于cpptools 0.15.0插件的配置文件更新 新的launch ...

  2. 2022.02.27 CF811E Vladik and Entertaining Flags

    2022.02.27 CF811E Vladik and Entertaining Flags https://www.luogu.com.cn/problem/CF811E Step 1 题意 在一 ...

  3. 2022.02.27 CF811E Vladik and Entertaining Flags(线段树+并查集)

    2022.02.27 CF811E Vladik and Entertaining Flags(线段树+并查集) https://www.luogu.com.cn/problem/CF811E Ste ...

  4. String、StringBuffer与StringBuilder之间区别[全屏看文]

    String.StringBuffer与StringBuilder之间区别[全屏看文]   最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,S ...

  5. 2018/03/27 每日一个Linux命令 之 cron

    Cron 用于配置定时任务. -- 环境为 Ubuntu16-04 -- 先说说怎么配置一个简单的定时任务.直观的可以看到效果. 之前在网上查找资料,对Shell编程不熟悉的实在是很头疼,走了不少弯路 ...

  6. 网易2018.03.27算法岗,三道编程题100%样例AC题解

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/8660814.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  7. javascript总结27 :特殊引用类型String/Number/Boolean

    为了方便操作基本数据类型,JavaScript还提供了三个特殊的引用类型:String/Number/Boolean 1  Number 例如: var s1 = "zhangsan&quo ...

  8. 2019.03.19 读书笔记 string与stringbuilder的性能

    1 string与stringbuilder 并不是stringbuilder任何时候都在性能上占优势,在少量(大约个位数)的字符串时,并不比普通string操作快. string慢的原因不是stri ...

  9. 2019.03.27 读书笔记 关于GC垃圾回收

    在介绍GC前,有必要对.net中CLR管理内存区域做简要介绍: 1. 堆栈:用于分配值类型实例.堆栈主要操作系统管理,而不受垃圾收集器的控制,当值类型实例所在方法结束时,其存储单位自动释放.栈的执行效 ...

  10. 2016.03.27,英语,《Vocabulary Builder》Unit 06

    equ: from Latin aequus, meaning 'equal', equalize:使相等; equivalent:[ɪ'kwɪvələnt], A is equivalent to ...

随机推荐

  1. reduce处理相同id合并对象内容为数组

    例: let arr = [     {         situationId: '666666666666666666666',         cloundClass: '999',     } ...

  2. 笔精墨妙,妙手丹青,微软开源可视化版本的ChatGPT:Visual ChatGPT,人工智能AI聊天发图片,Python3.10实现

    说时迟那时快,微软第一时间发布开源库Visual ChatGPT,把 ChatGPT 的人工智能AI能力和Stable Diffusion以及ControlNet进行了整合.常常被互联网人挂在嘴边的& ...

  3. Codeforces Round #648 (Div. 2) A~F题解

    开始补cf了,还是记录一下,加深思路,打的应该都是div2.题面不截图了,直接说题意,思路,代码. A 题意:给一个01矩阵,两个人轮流填格子,仅当第i行,第j列全为0时才能填,不能填的人输,问谁赢? ...

  4. 【读书笔记】排列研究-置换角度(分解为Products Of Cycles) 含GroupExploer使用

    upd 2020-08-06 23:11完成了最初稿 目录 定义 开胃菜 entrée 群论角度 应用:几何变换 当然要从第一类斯特林数的角度来考虑一下 一个排列的type定义 排旗公式 应用-共轭排 ...

  5. Freemon停止提供免费域名注册了

    前言 freemon是一家国外的域名注册商,提供很多顶级的域名注册,最棒的是它还提供了五个免费的顶级一级域名注册分别有:tk.cf.ml.ga.gq,而且据我所知是不限量注册,最高一年使用期,可以免费 ...

  6. 「java技术干货」switch分支结构详解

    前言 在上一篇文章中,壹哥给大家介绍了Java里的顺序.分支.循环结构的概念,并且重点给大家讲解了分支结构中的条件分支.并在条件分支中,详细地给大家讲解了if条件分支的使用.现在我们应该知道,if条件 ...

  7. Java输入与输出语句详细解析

    前言 我们在前面的文章中,学习了如何创建Java文件,也学习了Java里的标识符.运算符.进制等内容.有些同学觉得还不够过瘾,给壹哥发来了好多私信,期待我能够把进度更新的再快一点.这不,新内容这就给大 ...

  8. SpringBoot——配置及原理

    更多内容,前往IT-BLOG 一.Spring Boot全局配置文件 application.properties 与 application.yml 配置文件的作用:可以覆盖 SpringBoot ...

  9. IDEA2022中部署Tomcat Web项目

    使用工具: IDEA2022 Tomcat9.0.4 1.下载Tomcat: 官网:https://tomcat.apache.org/ 找到需要的版本下载即可,下载完成解压即可用: Tomcat目录 ...

  10. 基于OpenAI的代码编辑器,有点酷有点强!

    最近随着OpenAI的一系列大动作,把软件领域搅的天翻地覆.各行各业各领域,都出现了大量新产品. 开发工具领域首当其冲,各种新工具层出不穷,今天TJ就给大家推荐一个全新的开发工具:Cursor 从官网 ...