题目地址:https://leetcode-cn.com/contest/weekly-contest-185/problems/reformat-the-string/

题目描述

给你一个数组 orders,表示客户在餐厅中完成的订单,确切地说, orders[i]=[customerNamei,tableNumberi,foodItemi] ,其中 customerNamei 是客户的姓名,tableNumberi 是客户所在餐桌的桌号,而 foodItemi 是客户点的餐品名称。

请你返回该餐厅的 点菜展示表 。在这张表中,表中第一行为标题,其第一列为餐桌桌号 “Table” ,后面每一列都是按字母顺序排列的餐品名称。接下来每一行中的项则表示每张餐桌订购的相应餐品数量,第一列应当填对应的桌号,后面依次填写下单的餐品数量。

注意:客户姓名不是点菜展示表的一部分。此外,表中的数据行应该按餐桌桌号升序排列。

示例 1:

  1. 输入:orders = [["David","3","Ceviche"],["Corina","10","Beef Burrito"],["David","3","Fried Chicken"],["Carla","5","Water"],["Carla","5","Ceviche"],["Rous","3","Ceviche"]]
  2. 输出:[["Table","Beef Burrito","Ceviche","Fried Chicken","Water"],["3","0","2","1","0"],["5","0","1","0","1"],["10","1","0","0","0"]]
  3. 解释:
  4. 点菜展示表如下所示:
  5. Table,Beef Burrito,Ceviche,Fried Chicken,Water
  6. 3 ,0 ,2 ,1 ,0
  7. 5 ,0 ,1 ,0 ,1
  8. 10 ,1 ,0 ,0 ,0
  9. 对于餐桌 3David 点了 "Ceviche" "Fried Chicken",而 Rous 点了 "Ceviche"
  10. 而餐桌 5Carla 点了 "Water" "Ceviche"
  11. 餐桌 10Corina 点了 "Beef Burrito"

示例 2:

  1. 输入:orders = [["James","12","Fried Chicken"],["Ratesh","12","Fried Chicken"],["Amadeus","12","Fried Chicken"],["Adam","1","Canadian Waffles"],["Brianna","1","Canadian Waffles"]]
  2. 输出:[["Table","Canadian Waffles","Fried Chicken"],["1","2","0"],["12","0","3"]]
  3. 解释:
  4. 对于餐桌 1Adam Brianna 都点了 "Canadian Waffles"
  5. 而餐桌 12James, Ratesh Amadeus 都点了 "Fried Chicken"

示例 3:

  1. 输入:orders = [["Laura","2","Bean Burrito"],["Jhon","2","Beef Burrito"],["Melissa","2","Soda"]]
  2. 输出:[["Table","Bean Burrito","Beef Burrito","Soda"],["2","1","1","1"]]

提示:

  1. 1 <= orders.length <= 5 * 10^4
  2. orders[i].length == 3
  3. 1 <= customerNamei.length, foodItemi.length <= 20
  4. customerNameifoodItemi 由大小写英文字母及空格字符 ' ' 组成。
  5. tableNumberi 是 1 到 500 范围内的整数。

题目大意

给出了 Table 和 food 的一些匹配关系,求每条边出现的次数,以形成一张表格。

解题方法

字典统计边的次数

这个题本身不难,但是比较恶心,因为要返回的结果必须是指定格式的。所以我的代码写的贼麻烦。

  1. 统计 foods 和 tables 分别为多少,并进行排序。
  2. 统计每个桌的各个菜的次数
  3. 把所有的桌的菜按照顺序拼接成列表

Python代码如下:

  1. class Solution:
  2. def displayTable(self, orders: List[List[str]]) -> List[List[str]]:
  3. count = collections.defaultdict(dict)
  4. foods = set()
  5. tables = set()
  6. for order in orders:
  7. foods.add(order[2])
  8. tables.add(int(order[1]))
  9. foods = sorted(list(foods))
  10. cols = ["Table", ] + foods
  11. res = []
  12. res.append(cols)
  13. for order in orders:
  14. if order[2] not in count[order[1]]:
  15. count[order[1]][order[2]] = 0
  16. count[order[1]][order[2]] += 1
  17. for table in sorted(list(tables)):
  18. table = str(table)
  19. tc = count[table]
  20. line = [table,]
  21. for food in foods:
  22. if food not in tc:
  23. line.append("0")
  24. else:
  25. line.append(str(tc[food]))
  26. res.append(line)
  27. return res

欢迎关注负雪明烛的刷题博客,leetcode刷题800多,每道都讲解了详细写法!

日期

2020 年 4 月 19 日 —— 近期比赛太多

【LeetCode】1418. 点菜展示表 Display Table of Food Orders in a Restaurant的更多相关文章

  1. [转]基于display:table的CSS布局

    当IE8发布时,它将支持很多新的CSS display属性值,包括与表格相关的属性值:table.table-row和table-cell,它也是最后一款支持这些属性值的主流浏览器.它标志着复杂CSS ...

  2. CSS display:table属性用法- 轻松实现了三栏等高布局

    display:table:此元素会作为块级表格来显示(类似 <table>); display:table-cell属性指让标签元素以表格单元格的形式呈现,类似于td标签.目前IE8+以 ...

  3. 安卓下H5弹窗display:table的bug

    表单以弹窗的形式弹出时,若设置了表单的div:display:table下,安卓打开页面输入法的时候,表单顶到屏幕顶部之后,再也无法上滑,键盘遮住了下面的输入框.在ios下,一切显示正常,因为iOS会 ...

  4. display:table的几个妙用:垂直居中、浮动……

    一.为什么不用table系表格元素? 目前,在大多数开发环境中,已经基本不用table元素来做网页布局了,取而代之的是div+css,那么为什么不用table系表格元素呢? 1.用DIV+CSS编写出 ...

  5. css Table布局:基于display:table的CSS布局

    两种类型的表格布局 你有两种方式使用表格布局 -HTML Table(<table>标签)和CSS Table(display:table 等相关属性). HTML Table是指使用原生 ...

  6. display:table合并表格

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  7. 算法与数据结构基础 - 哈希表(Hash Table)

    Hash Table基础 哈希表(Hash Table)是常用的数据结构,其运用哈希函数(hash function)实现映射,内部使用开放定址.拉链法等方式解决哈希冲突,使得读写时间复杂度平均为O( ...

  8. display:table

    display:table的CSS声明能够让一个HTML元素和它的子节点像table元素一样.使用基于表格的CSS布局,使我们能够轻松定义一个单元格的边界.背景等样式,而不会产生因为使用了table那 ...

  9. display:table的用法

    目前,在大多数开发环境中,已经基本不用table元素来做网页布局了,取而代之的是div+css,那么为什么不用table系表格元素呢? 1.用DIV+CSS编写出来的文件k数比用table写出来的要小 ...

随机推荐

  1. dokuwiki使用随笔

    1. 在dokuwiki上安装MataJax插件后: a. $....$:之间书写数学公式;如完全平方公式:$a^2+b^2+2ab$,该公式将与当前行文字处于同一行; b. $$ .... $$ 之 ...

  2. 用Rsync实现windows下同步linux服务器的数据

    一:环境 1.服务端:Red Hat Enterprise Linux Server release 6.4 (Santiago) 2.客户端:windows7旗舰版64位 3.同步对象:测试数据 4 ...

  3. 【Linux】CentOS下升级Python和Pip版本全自动化py脚本

    [Linux]CentOS下升级Python和Pip版本全自动化py脚本 CentOS7.6自带py2.7和py3.6 想要安装其它版本的话就要自己重新下载和编译py其它版本并且配置环境,主要是软链接 ...

  4. Linux 参数代换 命令 xargs

    xargs 命令也是管道命令中的一员.xargs命令的功能简单来说就是参数代换.那么什么叫做参数代换,这里首先要了解管道的概念.在 linux管道 命令一节中我们详细介绍了管道命令的概念.这里我们只是 ...

  5. a这个词根

    a是个词根,有三种意思:1. 以某种状态或方式,如: ablaze, afire, aflame, alight, aloud, alive, afloat等2. at, in, on, to sth ...

  6. python写的多项式符号乘法

    D:\>poly.py(x - 1) * (x^2 + x + 1) = x^3 - 1 1 import ply.lex as lex # pip install ply 2 import p ...

  7. 零基础学习java------40---------Maven(maven的概念,安装,maven在eclipse中使用),springboot(spring整合springmvc(注解),spring整合mybatis(常见的配置文件)),前端页面(bootstrap软件)

    一 maven 1. Maven的相关概念 1.1 项目开发中遇到的问题 (1)都是同样的代码,为什么在我的机器上可以编译执行,而在他的机器上就不行? (2)为什么在我的机器上可以正常打包,而配置管理 ...

  8. Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null objec

    遇到这个一场折腾了1个小时, 这是系统在解析XML的时候出错, 最后费了好大的劲才发现 XML文件中,<View>  写成小写的 <view> 了. 崩溃啊.......... ...

  9. java实现链式线性表

    package ch9; public class LinkList <T>{ private class Node { //保存节点的数据 private T data; //指向下一个 ...

  10. ACE_Message_Block实现浅析

    ACE_Message_Block实现浅析1. 概述ACE_Message_Block是ACE中很重要的一个类,和ACE框架中的重要模式的实现 如ACE_Reactor, ACE_Proactor, ...