解决leetcode第3906题统计网格路径中好整数的数目

3906.统计网格路径中好整数的数目

难度:困难

问题描述:

给你两个整数l和r,以及一个由恰好三个'D'字符和三个'R'字符组成的字符串directions。

对于范围l,r(包含边界)内的每个整数x,执行以下步骤:

如果x的位数少于16位,请在其左侧填充前导零,使其成为16位的字符串。

将这16个数字以行优先的顺序放入一个4×4的网格中(前4个数字从左到右构成第一行,接下来的4个数字构成第二行,依此类推)。

从左上角单元格(row=0,column=0)开始,按顺序应用directions中的6个字符:

'D'使行数加1。

'R'使列数加1。

记录沿路径访问的数字序列(包括起始单元格),生成一个长度为7的序列。

如果记录的序列是非递减的,则认为整数x是一个好整数。

返回一个整数,表示在范围l,r内好整数的数量。

示例1:

输入:l=8,r=10,directions="DDDRRR"

输出:2

解释:

x=8的网格:

0 0 0 0

0 0 0 0

0 0 0 0

0 0 0 8

路径:(0,0)→(1,0)→(2,0)→(3,0)→(3,1)→(3,2)→(3,3)

访问的数字序列为0,0,0,0,0,0,8

由于访问的数字序列是非递减的,因此8是一个好整数。

x=9的网格:

0 0 0 0

0 0 0 0

0 0 0 0

0 0 0 9

访问的数字序列为0,0,0,0,0,0,9

由于访问的数字序列是非递减的,因此9是一个好整数。

x=10的网格:

0 0 0 0

0 0 0 0

0 0 0 0

0 0 1 0

访问的数字序列为0,0,0,0,0,1,0

由于访问的数字序列不是非递减的,因此10不是一个好整数。

因此,只有8和9是好整数,在该范围内总共有2个好整数。

示例2:

输入:l=123456789,r=123456790,directions="DDRRDR"

输出:1

解释:

x=123456789的网格:

0 0 0 0

0 0 0 1

2 3 4 5

6 7 8 9

路径:(0,0)→(1,0)→(2,0)→(2,1)→(2,2)→(3,2)→(3,3)

访问的数字序列为0,0,2,3,4,8,9

由于访问的数字序列是非递减的,因此123456789是一个好整数。

x=123456790的网格:

0 0 0 0

0 0 0 1

2 3 4 5

6 7 9 0

访问的数字序列为0,0,2,3,4,9,0

由于访问的数字序列不是非递减的,因此123456790不是一个好整数。

因此,只有123456789是好整数,在该范围内总共有1个好整数。

示例3:

输入:l=1288561398769758,r=1288561398769758,directions="RRRDDD"

输出:0

解释:

x=1288561398769758的网格:

1 2 8 8

5 6 1 3

9 8 7 6

9 7 5 8

路径:(0,0)→(0,1)→(0,2)→(0,3)→(1,3)→(2,3)→(3,3)

访问的数字序列为1,2,8,8,3,6,8

由于访问的数字序列不是非递减的,因此1288561398769758不是一个好整数。

没有好整数,在该范围内总共有0个好整数。

提示:

1<=l<=r<=9×10**15

directions.length==6

directions由恰好三个'D'字符和三个'R'字符组成。

问题分析:

解决本问题需要解决以下几个子问题:1是如何将一个整数变成一个16位的数字字符串,进而生成一个二维网格数组,这通过函数change_int_to_str_array(n)实现;2是如何根据directions中的操作符对生成的二维网格进行操作,得到一个包含7个元素的操作序列,这通过函数create_access_character_sequences(grid,directions)实现;3是根据上面的两步,判断一个整数是否为一个好整数,这通过函数check_if_a_good_int(n,d)实现;4主程序则对区间l,r之间的所有整数进行判断,计录其中的好整数个数,并输出计数结果。

程序如下:

python 复制代码
#将一个整数转换成一个16位的字符串,并形成一个4*4的二维数组返回
def change_int_to_str_array(n):
    n=str(n)
    l=len(n)
    n=(16-l)*'0'+n
    a=[n[:4],n[4:8],n[8:12],n[12:16]]
    return a

#利用directions字符串在给定的网格grid中访问生成访问字符序列并返回
def create_access_character_sequences(grid,directions):
    x,y=0,0 #x代表列数,y代表行数
    a=[grid[y][x]]
    for i in directions:
        if i=='D':
            y+=1
            a.append(grid[y][x])
        else:
            x+=1
            a.append(grid[y][x])
    return a

#判断一个整数是否为好整数,如果是,返回True,否则返回False
def check_if_a_good_int(n,d):
    grid=change_int_to_str_array(n)
    a=create_access_character_sequences(grid,d)
    b=sorted(a)
    if a==b:
        return True
    else:
        return False

#主程序
l=int(input('pls input l='))
r=int(input('pls input r='))
directions=input('pls input directions=')
c=0
for i in range(l,r+1):
    if check_if_a_good_int(i,directions):
        c+=1
print(f'共有好整数{c}个')

运行实例一

pls input l=123

pls input r=125

pls input directions=DDDRRR

共有好整数3个

运行实例二

pls input l=1223334444

pls input r=1223334446

pls input directions=DDRDRR

共有好整数3个

相关推荐
CV-Climber2 小时前
检索技术的实际应用
人工智能·算法
hhzz3 小时前
Tiger AI Platform平台中增加人脸识别功能
图像处理·人工智能·算法·计算机视觉·大模型
从零开始的代码生活_3 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
C^h4 小时前
python函数学习
人工智能·python·机器学习
Fanta丶4 小时前
4.Python set()集合、dict(字典、映射)、 数据容器的通用功能
python
决战灬4 小时前
langgraph之interrupt(理论篇)
人工智能·python·agent
TsingtaoAI4 小时前
3D高斯泼溅技术发展及其在具身智能领域的应用综述
人工智能·算法·ai·具身智能·高斯泼溅
atunet4 小时前
关于图算法中的连通分量检测与最小割问题7
算法
兜客互动4 小时前
2026年AI关键词拓展挖掘软件,高效助力内容创作精准获流
人工智能·python
weixin_538601974 小时前
智能体测开Day30pytest测试框架
python