如何在 LeetCode 上创建测试用例?

力扣支持团队发表于:2024年08月23日 中午 12:27:02更新于:2024年08月23日 下午 1:23:24

1.简单介绍

在提交您的代码之前,建议您对各种测试用例进行代码测试,特别是问题描述中提供的测试用例。

测试用例区域默认情况下已经填充了示例测试用例,但您可以修改这些用例以测试不同的情况。下图用红色突出显示了测试区域。

示例:让我们以题目 “求出所有子序列的能量和” 为参考。

00166c6b60feace1dd6fe22d7cdc35c


在设置好您的测试用例后,点击“运行”按钮在 LeetCode 上执行,就可以展示测试结果,可以验证当前代码输出与这些测试用例的通过情况。如果您解决了代码中的所有问题,点击“提交”按钮后您的代码将在系统所有测试用例中运行,彻底验证您的代码,以验证其正确性。



2.输入模式

在输入测试用例时,您可以选择两种输入模式:标签效果模式或文本模式。要在这两者之间切换,请点击测试用例面板下方的 </> Source 按钮。

2.1 标签效果模式

此模式提供了一个结构化和用户友好的界面。您可以使用图形界面逐一输入参数。例如,要输入  nums = [1, 2, 3, 4]  和  k = 3  的测试用例,只需在各自的字段中输入这些值。

00166c6b70671b3caa3f2bd3308daf7

 

2.2 文本模式

在文本模式下,您在不同的行上输入参数。要测试多个用例,您可以连续输入它们。以下是如何输入两个测试案例的示例:

00166c6b78059c5e90f23874df4299c

这个方法适用于您需要一次性输入或编辑多个测试用例的情况。


 

3. LeetCode 输入格式

在 LeetCode 中正确输入测试用例对于调试您的代码至关重要。本节将指导您了解您可能会遇到的各种输入类型,从基本数据类型到复杂的自定义数据结构和特殊输入场景。

3.1 基本数据类型

本节涵盖基本数据类型,如整数、布尔值、字符和字符串。这些是构造复杂数据结构的基础,因此掌握其输入格式对于处理高级结构至关重要。

类型

描述

实例

备注

整型

一种表示没有小数部分的整数数据类型。

通常大小为 4 字节(32 位)。

-1

0

2147483647

整型的范围是[-231, 231-1] 。

长整型

整型的扩展版本,可以存储更大的数值。

通常大小为 8 字节(64 位)。

-1

0

-9223372036854775808

长整型的范围是[−263, 263-1].

布尔值

表示两个二进制值之一的数据类型:truefalse

true

false

 

双精度浮点数

表示带有小数点的浮点数。            

通常大小为 8 字节(64 位)。

245.32

1.0000

-1000000000000.2345

双精度浮点数的范围大约是[−1.7 × 10308,            1.7 × 10308].

避免使用逗号或多个小数点。

字符型

表示单个字母、数字字符、符号或标点符号的数据类型。            

通常大小为 1 字节(8 位),按 ASCII 编码方式处理。

"a"

"\n" 换行

"\\" 反斜线

字符必须在标准 ASCII 范围内(0 至 127 )。

字符必须用双引号(”)括起来。      

必要时使用转义序列(例如,\\ 用于反斜杠)。

字符串

一系列字符,包括字母、数字、标点符号、空格和其它符号。            

"" 空字符

"Hello world"

"1337's \"world\""

字符串必须用双引号(”)括起来。            

字符串中的每个字符必须在标准 ASCII 范围内(0 至 127)。

 

3.2 标准数据结构

LeetCode 题目通常涉及复杂的数据结构,如链表和二叉树已经被提前定义好以节省您的时间。下表介绍了如何为测试用例格式化和输入这些结构。

类型

描述

实例

备注

数组

用于存储一系列具有相同数据类型的元素的数据结构。

[] 空数组.

[1] 单个整数。

["a","hello","world"] 3 个字符串。

数组必须包含相同数据类型的元素。

二维数组

一个由数组组成的数组,其中每个子数组代表一行。它可以像矩阵的结构保存元素。

[] 空的二维数组。

[[]] 1 行,0 个元素。

[[1]] 1 行,1 个元素。

[[1,2],[3,4]] 2x2 矩阵。

[[1],[2,3],[4,5,6]] 3 行。

二维数组可以固定列的数量(例如,C# 中的int[,])或可变数量的列(例如,C# 中的int[][])。仔细阅读题目的要求或编程语言的细节,以了解具体的结构。

链表

由节点组成的线性数据结构,每个节点包含一个值和指向下一个节点的指针。

[] 空链表。

[1] 带有 1 个节点的链表。

[-1,0] 2 个节点的链表。

序列化:

  • [1, 2, 3]并不是一个数组,而是一种表示链表的可打印格式。在这种格式中,每个数字代表一个节点的值,序列展示了节点是如何连接的。

  • 列表[1, 2, 3]在链接列表中看起来像这样:

     1 -> 2 -> 3
     ^
     |
    head
  • []不是一个空数组,而是表示一个空的链接列表,其中头是对NULL(C/C++)、null(Java/C#/JavaScript)、None(Python)或nil(Ruby)的引用。

 

备注: 使用提供的 ListNode 类型,不要自行定义。

二叉树

树形数据结构,其中每个节点最多有两个子节点,分别称为左子节点和右子节点。

[] 空树


[1,2,3]

download_image (3).png


[1,null,2,3]

下载_图像(4).png


[5,4,7,3,null,2,null,-1,null,9]

下载_图片(5).png

序列化:

  • [1, null, 2, 3]并不是一个数组,而是一种使用 层序遍历 的可打印格式来表示二叉树。在层序遍历中,树是按层级从上到下、从左到右遍历的。

  • null用于表示树中缺失的节点。它表示在那个位置上没有节点存在,这帮助你理解树的整体形状,特别是当一些节点不完整时。

  • []不是空数组,而是表示空二叉树,其中根是对NULL(C/C++)、null(Java/C#/JavaScript)、None(Python)或nil(Ruby)的引用。

 

备注: 使用提供的 TreeNode 类型,不要自行定义。

 

3.3 自定义数据结构

一些 LeetCode 题目定义了特定于该问题的自定义类型或数据结构。问题描述中详细介绍了结构和输入格式。类型或数据结构定义,包括其实现的类、构造函数和方法,在描述和代码注释中提供。

示例:

  1. N 叉树

    二叉树的扩展,其中每个节点可以有任意数量的子节点。

    示例问题:

    N 叉树的前序遍历

    序列化和反序列化 N 叉树(Plus 会员)

  2. 多级双向链表

    一个链表,其中节点可以有需要扁平化的子列表。

    示例问题:扁平化多级双向链表

  3. 带有随机指针的链表

    链表的每个节点中都有一个额外的指针,可以指向列表中的任何节点。

    示例问题:随机链表的复制

  4. 无向图

    一个无向图,其中每个节点都有一个值和一组邻接节点列表。

    示例问题:克隆图

 

3.4 处理特殊输入

在某些 LeetCode 题目中,某些输入参数在内部用于构建类型或数据结构,并且可能无法在您的代码中直接访问。理解这些特殊的输入对于正确设置测试用例至关重要。

示例:

  1. 环形链表
    包含循环的链表。额外的pos参数表示尾节点的下一个指针所连接的节点的索引。只有head被传递到您的函数中;pos用于构建循环,在您的函数内部无法访问。

  2. 猜数字大小

    一个猜数字游戏,你的函数尝试使用更高或更低的提示来猜测一个秘密数字。额外的pick参数是秘密数字,您的函数无法访问。

  3. 扫地机器人(Plus 会员)

    一个机器人被控制用来清洁一个有障碍物的房间。参数 roomrow 和 col分别代表房间的地图和机器人的初始位置。你只接收到一个robot 对象,你必须使用它的接口来控制它清洁房间。机器人的位置不是直接可知的,你必须依赖它的 API 来导航。

  4. 猜猜这个单词

    在这个问题中,你需要使用一系列猜测来猜测一个隐藏的单词。每个猜测都返回与隐藏单词匹配的字母数量。隐藏的单词本身对你的函数是不可见的;只有每次猜测的响应是可用的。

 

3.5 设计问题格式

LeetCode 上的 设计问题 很特别,因为它们通常需要您实现具有特定约束和要求的接口。这些问题需要结合算法知识和软件工程原理。

设计问题的输入格式由两部分组成:

  1. 函数名:在自定义类上调用的函数名列表。

  2. 函数参数:与每个函数调用对应的参数列表。

示例:

思考题目 最小栈 。输入格式如下:

["MinStack","push","push","push","getMin","pop","top","getMin"]
[[],[-2],[0],[-3],[],[],[]]

此输入对应于以下函数调用序列:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); // 返回 -3
minStack.pop();
minStack.top(); // 返回 0
minStack.getMin(); // 返回 -2

这种格式可以帮助您可视化该类及其方法在测试用例中的使用情况。 


3.6 数据库问题格式

对于数据库问题,输入格式由预定义表的内容组成。这些表中填充了数据,此处 详细介绍了其输入格式。