type
status
date
slug
summary
tags
category
icon
password
Property
模拟就是用计算机来模拟题目中要求的操作。
一只长度不计的蠕虫位于英寸深的井的底部。它每次向上爬英寸,但是必须休息一次才能再次向上爬。在休息的时候,它滑落了英寸。之后它将重复向上爬和休息的过程。蠕虫爬出井口需要至少爬多少次?如果蠕虫爬完后刚好到达井的顶部,我们也设作蠕虫已经爬出井口。
分隔链表
题目:
给你一个链表的头节点
head
和一个特定值 x
,请你对链表进行分隔,使得所有 小于 x
的节点都出现在 大于或等于 x
的节点之前。应当 保留 两个分区中每个节点的初始相对位置。示例:
维护两个链表 和 , 链表按顺序存储所有小于 的节点, 链表按顺序存储所有大于等于 的节点。遍历完原链表后,只要将 链表尾节点指向链表的头节点即能完成对链表的分隔。
对角线遍历
题目:给你一个大小为
m x n
的矩阵mat
,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。示例:
一共有条对角线,相邻的对角线的遍历方向不同,当前遍历方向为从左下到右上,则紧挨着的下一条对角线遍历方向为从右上到左下;
设对角线从上到下的编号为:
- 当 为偶数时,则第 条对角线的走向是从下往上遍历
- 当 为奇数时,则第 条对角线的走向是从上往下遍历
当第 条对角线从下往上遍历时,每次行索引减1,列索引加1,直到矩阵的边缘为止:
- 当 时,则此时对角线遍历的起点位置为
- 当 时,则此时对角线遍历的起点位置为
当第 条对角线从上往下遍历时,每次行索引加1,列索引减1,直到矩阵的边缘为止:
- 当 时,则此时对角线遍历的起点位置为
- 当 时,则此时对角线遍历的起点位置为
第 N 位数字
题目:给一个整数
n
,请你在无限的整数序列[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...]
中找出并返回第n
位上的数字示例:
是一位数, 一位数共有9个, 总计产生位数字, 是两位数, 两位数共有个, 总计产生位数字 ...
可以把位数里产生的数字个数算出来它等于位数字。 由此通过一个循环,对不同位数一共产生了多少位数字做累计并和进行比较,就可以判断出对应的数字是几位数字。
找到这个具体的数字,假设 对应的数字是 。 先扣掉比 位数低的数字一共占用了多少位。这个在第一步里就求出来了,假设得到的值为 。 剩余的 都是由 位数贡献的,因而求除求余就可以知道 对应的是第几个 位数。
以为例。 第一步扣掉; 得到对应的是一个三位数。 且即说明是第一个三位数。说明是第一个三位数的第一个数字。 而第一个三位数是,从而得到答案。
验证IP地址
题目:
给定一个字符串
queryIP
。如果是有效的 IPv4 地址,返回 "IPv4"
;如果是有效的 IPv6 地址,返回 "IPv6"
;如果不是上述类型的 IP 地址,返回 "Neither"
。有效的IPv4地址 是
“x1.x2.x3.x4”
形式的IP地址。 其中0 <= xi <= 255
且 xi
不能包含 前导零。例如: “192.168.1.1”
、 “192.168.1.0”
为有效IPv4地址, “192.168.01.1”
为无效IPv4地址; “192.168.1.00”
、 “192.168@1.1”
为无效IPv4地址。一个有效的IPv6地址 是一个格式为
“x1:x2:x3:x4:x5:x6:x7:x8”
的IP地址,其中:1 <= xi.length <= 4
xi
是一个 十六进制字符串 ,可以包含数字、小写英文字母('a'
到'f'
)和大写英文字母('A'
到'F'
)。
- 在
xi
中允许前导零。
例如
"2001:0db8:85a3:0000:0000:8a2e:0370:7334"
和"2001:db8:85a3:0:0:8A2E:0370:7334"
是有效的IPv6 地址,而 "2001:0db8:85a3::8A2E:037j:7334"
和 "02001:0db8:85a3:0000:0000:8a2e:0370:7334"
是无效的 IPv6 地址。示例:
首先查找给定的字符串 中是否包含符号 。如果包含,那么我们需要判断其是否为 IPv4 地址;如果不包含,我们则判断其是否为 IPv6 地址。
对于 IPv4 地址而言,它包含4个部分,用 隔开。因此可以存储相邻两个 出现的位置 和(当考虑首个部分时, ;当考虑最后一个部分时, ,其中 是字符串的长度),那么子串 就对应着一个部分。需要判断:
- 它的长度是否在 之间(虽然这一步没有显式要求,但提前判断可以防止后续计算值时32位整数无法表示的情况)
- 它是否只包含数字
- 它的值是否在 之间
- 它是否不包含前导零。具体地,如果它的值为0,那么该部分只能包含一个0,即 ;如果它的值不为 0,那么该部分的第一个数字不能为0,即 不为0
对于 IPv6 地址而言,它包含8个部分,用 隔开。同样地,可以存储相邻两个 出现的位置和,那么子串就对应着一个部分。需要判断:
- 它的长度是否在 [1,4] 之间;
- 它是否只包含数字,或者 ,或者
除了上述情况以外,如果无法找到对应数量的部分,那么给定的字符串也不是一个有效的 IP 地址。