解决leetcode第3791题.给定范围内平衡整数的数目

3791.给定范围内平衡整数的数目

难度:困难

问题描述:

给你两个整数low和high。

如果一个整数同时满足以下两个条件,则称其为平衡整数:

它至少包含两位数字。

偶数位置上的数字之和等于奇数位置上的数字之和(最左边的数字位置为1)。

返回一个整数,表示区间low,high(包含两端)内平衡整数的数量。

示例1:

输入:low=1,high=100

输出:9

解释:

1到100之间共有9个平衡数,分别是11、22、33、44、55、66、77、88和99。

示例2:

输入:low=120,high=129

输出:1

解释:

只有121是平衡的,因为偶数位置与奇数位置上的数字之和都为2。

示例3:

输入:low=1234,high=1234

输出:0

解释:

1234不是平衡的,因为奇数位置上的数字之和(1+3=4)不等于偶数位置上的数字之和(2+4=6)。

提示:

1<=low<=high<=1015

问题分析:

本问题是一个用枚举算法解决的问题,通过枚举区间low,hight中的每一个整数,然后判断这个整数是否为一个平衡整数,如果是,则作记录,如果不是则继续列举下一个整数,这样列举完区间中所有整数,统计记录下来的整数个数,即为问题的解,所以本问题解决的关键就是如何判断一个整数是否为一个平衡整数的问题,程序中设计了函数check_balance_number(n),其功能是对输入的一个整数n进行判断,如何n是平衡整数,返回True,否则返回False,其判断逻辑见程序。

程序如下:

python 复制代码
#判断一个整数是否为平衡整数,如果是返回True,否则返回False
def check_balance_number(n):
    if n<10:
        return False
    else:
        n=str(n)
        odd_position=list(map(int,n[::2]))
        even_position=list(map(int,n[1::2]))
        if sum(odd_position)!=sum(even_position):
            return False
        else:
            return True

#主程序
low,high=eval(input('pls input low,high='))
a=[]
for i in range(low,high+1):
    if check_balance_number(i):
        a.append(i)
print(f'在区间[{low},{high}]内有平衡数{a}共{len(a)}个')

运行实例一

pls input low,high=200,300

在区间200,300内有平衡数220, 231, 242, 253, 264, 275, 286, 297共8个

运行实例二

pls input low,high=1,50

在区间1,50内有平衡数11, 22, 33, 44共4个

运行实例三

pls input low,high=2134,2134

在区间2134,2134内有平衡数2134共1个

如下:

相关推荐
南境十里·墨染春水2 小时前
C++ 工厂模式:从入门到进阶,彻底掌握对象创建的艺术
开发语言·c++·算法
@insist1232 小时前
系统架构设计师-实时性评价、调度算法与内核架构选型
算法·架构·系统架构·软考·系统架构设计师·软件水平考试
某人辛木2 小时前
Web自动化测试
前端·python·pycharm·pytest
C+++Python2 小时前
详细介绍一下Java泛型的通配符
java·windows·python
小帅热爱难回头3 小时前
编写Skill生成AI落地项目系统架构
python
diving deep4 小时前
脚本速览-python
开发语言·python
2601_951643775 小时前
Python第一,Java跌出前三,C语言杀回来了
java·c语言·python·编程语言排行·技术趋势
AC赳赳老秦7 小时前
OpenClaw+Power Apps 实战:自动生成 Power Apps 应用、连接 Excel 数据源
大数据·开发语言·python·serverless·excel·deepseek·openclaw
一只齐刘海的猫7 小时前
【Leetcode】找到字符串中所有字母异位词
算法·leetcode·职场和发展