当前位置: 首页 > news >正文

东莞市公司网站建设品牌/网络推广客服好做吗

东莞市公司网站建设品牌,网络推广客服好做吗,长春 建网站,企业网站建设实训心得1. 题目 906. 超级回文数 2. 解题思路 题目意思很简单,在给定范围中找到所有满足,它本身是回文,且它的平方也是回文的数字个数。 这题需要注意题目给定的范围,后面很有用: 因为回文范围是有限的,那么我…

1. 题目

906. 超级回文数

2. 解题思路

题目意思很简单,在给定范围中找到所有满足,它本身是回文,且它的平方也是回文的数字个数。
这题需要注意题目给定的范围,后面很有用:
image.png
因为回文范围是有限的,那么我们可以先初始化基础情况,也就是枚举出单个数字,和两位数字的回文。
题目要求范围大于1,那么我们枚举的基础数字就是1-9,通过下面的代码就可以初始化好基础的回文。
image.png|700

然后我们针对每个回文进行判断,它的平方是不是回文,如果是就给结果加一。
如果当前回文数的长度是偶数,继续通过在中间插入一个或两个字符(从’0’到’9’)来生成新的、更长的回文数,并将它们加入队列。这样能够递归生成长度更长的回文数。
如果当前回文数的平方已经超出了范围 [left, right],则停止处理该回文数。
最后统计结果就好了。

注意:上面的代码在LC可以通过,但是在PAT有些用例会超出内存限制,所以下面进行一版优化:
整理思路方向不变,还是通过遍历生成回文数来判断,做如下优化:

  • 直接通过构建回文数的前半部分,然后反转其一部分生成完整的回文数。这避免了逐步拼接字符串的过程,提高了效率。
  • 循环从1到10位生成回文数,并且限制了每个回文数的生成长度。通过计算有效的起始和结束范围(startend),确保生成的数字合理。
  • 在生成每个回文数的平方后,立即检查其是否超过上限 R,如果超过,立刻停止后续的生成过程。

3. 代码

3.1. 注意点

[!NOTE] 1、19行的tmp.length() > 10 这个判断条件是啥意思
[1, 10^18) 是题目给定的整数范围,超过这个范围的数值不需要再检查。而数字的长度超过10位的平方肯定超过了这个范围。
回文数长度达到11位,那么它的平方就会超过 10^22,远远超出题目要求的范围 10^18

[!NOTE] 2、24行的if (tmpNum * tmpNum < 0) 这个判断条件是啥意思
我们的tmpNum类型为Long,当tmpNum * tmpNum 的结果超过Long的最大值,那么就会溢出成负数,这种情况也没必要处理了。

[!NOTE] 3、为什么在处理当前数字为偶数的时候要插入字符,并且只插入1、2个字符,不插入3、4、5…个
因为回文是数字对称的,它往往可以直接在当前回文上进行插入来得到新回文,处理代码会尝试在当前偶数长度的回文数中间插入一个或两个数字,生成更长的回文数。这样做的目的是生成可能符合条件的下一个更长的回文数,并且保持回文数的对称性。

  • 插入一个 字符:生成奇数长度的回文数。例如从 "1221" 生成 "12321",这个新回文数的长度是奇数。
  • 插入两个相同的 字符:生成偶数长度的回文数。例如从 "1221" 生成 "123321",这个新回文数的长度是偶数。
    这种方式已经覆盖了常见的奇数和偶数长度回文数的情况,不需要再增加额外的插入方式。

[!NOTE] 4、32行统计的答案是tmp还是tmp的平方?
答案是tmpNum*tmpNum
题目定义:如果一个正整数自身是回文数,而且它也是一个回文数的平方,那么我们称这个数为超级回文数。
所以tmpNum*tmpNum代表它是tmpNum的平方,所以tmpNum*tmpNum才是超级回文数

3.2. 完整代码

class Solution {public int superpalindromesInRange(String left, String right) {Long l = Long.parseLong(left);Long r = Long.parseLong(right);int res = 0;String[] strs = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};Queue < String > queue = new LinkedList < > ();//L 和 R 是表示 [1, 10^18) 范围的整数的字符串。 所以i从1开始for (int i = 1; i < 10; i++) {queue.offer(strs[i]);queue.offer(strs[i] + strs[i]);}while (!queue.isEmpty()) {String tmp = queue.poll();if (tmp.length() > 10) {continue;}Long tmpNum = Long.parseLong(tmp);//处理溢出情况,tmp的平方有可能会大于Long的最大值if (tmpNum * tmpNum < 0) {continue;}if (tmpNum * tmpNum <= r) {StringBuilder sb = new StringBuilder();sb.append(tmpNum * tmpNum);//判断当前数字的平方是不是回文if (tmpNum * tmpNum >= l && sb.toString().equals(sb.reverse().toString())) {res++;}if (tmp.length() % 2 == 0) {//向当前回文数插入数字构造新的更长的回文数for (String c: strs) {queue.offer(tmp.substring(0, tmp.length() / 2) + c + tmp.substring(tmp.length() / 2));queue.offer(tmp.substring(0, tmp.length() / 2) + c + c + tmp.substring(tmp.length() / 2));}}}}return res;}
}

3.2.1. PAT完整代码

[!NOTE] 解释下新的核心代码,即17行开始的for循环
1、外层循环for (int length = 1; length <= 10; length++) :代表生成1-10位的回文数,为啥是10位呢?
题目要求的范围是[1, 10^18) ,10位数的平方已经超过这个范围了
2、起始和结束范围:通过计算范围来确定生成的数字范围,比如长度为2,那范围就是10-99

  • 计算起始值
  • int start = (int) Math.pow(10, halfLength - 1);
  • 这行代码计算当前半长度的最小值。
  • 例如:
  • halfLength = 1start = 10^0 = 1,表示从1开始。
  • halfLength = 2start = 10^1 = 10,表示从10开始。
  • halfLength = 3start = 10^2 = 100,表示从100开始。
  • 计算结束值int end = (int) Math.pow(10, halfLength);
  • 这行代码计算当前半长度的下一个值(不包括在内,通过for循环的结束条件来控制不包括在内)。
  • 例如:
  • halfLength = 1end = 10^1 = 10,表示到9为止。
  • halfLength = 2end = 10^2 = 100,表示到99为止。
  • halfLength = 3end = 10^3 = 1000,表示到999为止。

3、生成回文数
循环遍历从 startend 的所有数,构建回文数:

  • firstHalf 是前半部分(例如,123 的前半部分是 12)。
  • secondHalf 是前半部分的反转(例如,12 反转为 21),并与前半部分拼接成完整的回文数(例如,121)。

4、后续处理:
后续就判断该数字是否超过题目范围,以及它的平方数是不是回文,如果是,那它的平方数就是一个超级回文数
5、int halfLength = (length + 1) / 2为什么要加一
它为了处理奇数长度的情况,确保在生成回文时能够正确地获取中间的数字。例如,对于长度为 5 的回文,(5 + 1) / 2 结果为 3,这样可以包含中间的数字。
6、square > R后为什么直接break?
和LC的解法不同,PAT的解法是直接从小到大遍历的,当前的数据超出范围了,它后面的数据比它大,肯定也会超出范围,所以直接break
7、为什么firstPath.substring(0,length/2)不是firstPath.substring(0,firstPath.length()/2)
image.png

import java.util.*;
import java.util.stream.Collectors;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);List<Long> in = Arrays.stream(sc.nextLine().split(",")).map(Long::valueOf).collect(Collectors.toList());long L = in.get(0);long R = in.get(1);List<Long> res = new ArrayList<>();// 从1到10位的数字开始生成回文数for (int length = 1; length <= 10; length++) {int halfLength = (length + 1) / 2;//Math.pow:10的halfLength - 1次方int start = (int) Math.pow(10, halfLength - 1);int end = (int) Math.pow(10, halfLength);for (int i = start; i < end; i++) {String firstHalf = Integer.toString(i);StringBuilder secondHalf = new StringBuilder(firstHalf.substring(0, length / 2)).reverse();String palindrome = firstHalf + secondHalf.toString();long num = Long.parseLong(palindrome);long square = num * num;if (square > R) {break; // 剪枝:平方数超过R时停止}if (square >= L && isPalindrome(Long.toString(square))) {res.add(square);}}}Collections.sort(res);System.out.println(res);}// 判断是否是回文数private static boolean isPalindrome(String s) {int left = 0;int right = s.length() - 1;while (left < right) {if (s.charAt(left) != s.charAt(right)) {return false;}left++;right--;}return true;}
}

相关文章:

906. 超级回文数

1. 题目 906. 超级回文数 2. 解题思路 题目意思很简单&#xff0c;在给定范围中找到所有满足&#xff0c;它本身是回文&#xff0c;且它的平方也是回文的数字个数。 这题需要注意题目给定的范围&#xff0c;后面很有用&#xff1a; 因为回文范围是有限的&#xff0c;那么我…...

代码随想录算法训练营||二叉树

前/中/后序遍历 递归方式 参考文章 题目 思路&#xff1a;其实递归方式的前中后序遍历的方式都差不多&#xff0c;区别是在父节点的遍历时间。 前序代码 class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> result new…...

线上报名小程序怎么做

在这个数字化、智能化的时代&#xff0c;信息技术的发展正以前所未有的速度改变着我们的生活。无论是学习、工作还是娱乐&#xff0c;互联网都成为了我们不可或缺的一部分。而在线上报名这一领域&#xff0c;小程序的出现更是为广大用户带来了前所未有的便捷与高效。今天&#…...

【测试岗】手撕代码 - 零钱兑换

322. 零钱兑换 题目描述 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。 你可以认为每种…...

菱形继承的类对父类的初始化、组合、多态、多态的原理等的介绍

文章目录 前言一、菱形继承的类对父类的初始化二、组合三、 多态1. 构成多态2. 虚函数3. 虚函数的重写4. 虚函数重写的两个例外1. 协变2. 析构函数的重写 5. C11 final 和 override1. final2. override 6. 设计不想被继承的类7. 重载、覆盖&#xff08;重写&#xff09;、 隐藏…...

React Native 在 build 的时候如果出现 `babel.config.js` 配置文件的错误

React Native 在 build 的时候如果出现以下错误, 就是 babel.config.js 配置文件的错误. Showing Recent Issues node:internal/process/promises:289triggerUncaughtException(err, true /* fromPromise */);^Error: .plugins[0][1] must be an object, false, or undefineda…...

【Linux】包管理器、vim详解及简单配置

&#x1f680;个人主页&#xff1a;小羊 &#x1f680;所属专栏&#xff1a;Linux 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 前言一、包管理器1.1 apt1.2 yum 二、Linux编辑器——vim2.1 vim的三种模式2.2 vim普通模式常用命令2.2.1 移动…...

AVL树实现

1.AVL的概念 1.AVL树属于二叉搜索树的一种&#xff0c;但它不同与普通的二叉搜索树还具有以下的性质&#xff1a; 每一个根的左右子树的高度差的绝对值不超过1。AVL树是通过高度差去控制平衡的&#xff0c;所以又称作为平衡二叉搜索树。 2.AVL树实现我们引入了一个平衡因子的概…...

初始MYSQL数据库(6)—— 事务

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a; MYSQL 目录 事务的概念 事务的ACID特性 使用事务 查看支持事务的存储引擎 事务的语法 保存点 自动/手动提交事务 事务的隔离性和…...

0基础学习PyTorch——GPU上训练和推理

大纲 创建设备训练推理总结 在《Windows Subsystem for Linux——支持cuda能力》一文中&#xff0c;我们让开发环境支持cuda能力。现在我们要基于《0基础学习PyTorch——时尚分类&#xff08;Fashion MNIST&#xff09;训练和推理》&#xff0c;将代码修改成支持cuda的训练和推…...

这款免费工具让你的电脑焕然一新,专业人士都在用

HiBit Uninstaller 采用单一可执行文件的形式,无需复杂的安装过程,用户可以即刻开始使用。这种便捷性使其成为临时使用或紧急情况下的理想选择。尽管体积小巧,但其功能却异常强大,几乎不会对系统性能造成任何负面影响。 这款工具的一大亮点是其多样化的功能。它不仅能够常规卸…...

Java高级Day52-BasicDAO

138.BasicDao 基本说明&#xff1a; DAO&#xff1a;data access object 数据访问对象 这样的通用类&#xff0c;称为 BasicDao&#xff0c;是专门和数据库交互的&#xff0c;即完成对数据库(表)的crud操作 在BasicDao 基础上&#xff0c;实现一张表对应一个Dao&#xff0c;…...

【OceanBase 诊断调优】—— SQL 诊断宝典

视频 OceanBase 数据库 SQL 诊断和优化&#xff1a;https://www.oceanbase.com/video/5900015OB Cloud 云数据库 SQL 诊断与调优的应用实践&#xff1a;https://www.oceanbase.com/video/9000971SQL 优化&#xff1a;https://www.oceanbase.com/video/9000889阅读和管理SQL执行…...

微服务Redis解析部署使用全流程

目录 1、什么是Redis 2、Redis的作用 3、Redis常用的五种基本类型&#xff08;重要知识点&#xff09; 4、安装redis 4.1、查询镜像文件【省略】 4.2、拉取镜像文件 4.3、启动redis并设置密码 4.3.1、修改redis密码【可以不修改】 4.3.2、删除密码【坚决不推荐】 5、S…...

C++之STL—常用排序算法

sort (iterator beg, iterator end, _Pred) // 按值查找元素&#xff0c;找到返回指定位置迭代器&#xff0c;找不到返回结束迭代器位置 // beg 开始迭代器 // end 结束迭代器 // _Pred 谓词 random_shuffle(iterator beg, iterator end); // 指定范围内的元素随机调…...

【驱动】地平线X3派:备份与恢复SD卡镜像

1、备份镜像 1.1 安装gparted GParted是硬盘分区软件GNU Parted的GTK+图形界面前端,是GNOME桌面环境的默认分区软件。 GParted可以用于创建、删除、移动分区,调整分区大小,检查、复制分区等操作。可以用于调整分区以安装新操作系统、备份特定分区到另一块硬盘等。 在Ubun…...

【C++报错已解决】std::ios_base::failure

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…...

matlab入门学习(四)多项式、符号函数、数据统计

一、多项式 %多项式&#xff08;polynomial&#xff09;%创建 p[1,2,3,4] %系数向量&#xff0c;按x降幂排列&#xff0c;最右边是常数&#xff08;x的0次幂&#xff09; f1poly2str(p,x) %系数向量->好看的字符串 f x^3 2 x^2 3 x 4&#xff08;不能运算的式子&#xf…...

leetcode621. 任务调度器

给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表&#xff0c;用字母 A 到 Z 表示&#xff0c;以及一个冷却时间 n。每个周期或时间间隔允许完成一项任务。任务可以按任何顺序完成&#xff0c;但有一个限制&#xff1a;两个 相同种类 的任务之间必须有长度为 n 的冷却时…...

Spark 的 Skew Join 详解

Skew Join 是 Spark 中为了解决数据倾斜问题而设计的一种优化机制。数据倾斜是指在分布式计算中&#xff0c;由于某些 key 具有大量数据&#xff0c;而其他 key 数据较少&#xff0c;导致某些分区的数据量特别大&#xff0c;造成计算负载不均衡。数据倾斜会导致个别节点出现性能…...

讯飞星火编排创建智能体学习(一)最简单的智能体构建

目录 开篇 智能体的概念 编排创建智能体 创建第一个智能体 ​编辑 大模型节点 测试与调试 开篇 前段时间在华为全联接大会上看到讯飞星火企业级智能体平台的演示&#xff0c;对于拖放的可视化设计非常喜欢&#xff0c;刚开始以为是企业用户才有的&#xff0c;回来之后查…...

mac-m1安装nvm,docker,miniconda

1.安装minicondaMAC OS(M1)安装配置miniconda_mac-mini m1 conda-CSDN博客 2.安装nvm&#xff08;用第二个方法&#xff09;Mac电脑安装nvm(node包版本管理工具)-CSDN博客 3.安装docker dmg下载链接docker-toolbox-mac-docker-for-mac安装包下载_开源镜像站-阿里云 教程MacOS系…...

STM32F407之Flash

寄存器分类 一般寄存器分为只读存储器 (ROM) 随机存储器(RAM) 只读存储器 只读存储器也被称为ROM 在正常工作时只能读不能写。 只读存储器经历的阶段 ROM->PROM->EPROM->EEPROM ->Flash 优点&#xff1a;掉电不丢失&#xff0c;解构简单 缺点&#xff1a;只适…...

优化 Go 语言数据打包:性能基准测试与分析

场景&#xff1a;在局域网内&#xff0c;需要将多个机器网卡上抓到的数据包同步到一个机器上。 原有方案&#xff1a;tcpdump -w 写入文件&#xff0c;然后定时调用 rsync 进行同步。 改造方案&#xff1a;使用 Go 重写这个抓包逻辑及同步逻辑&#xff0c;直接将抓到的包通过网…...

【SQL】未订购的客户

目录 语法 需求 示例 分析 代码 语法 SELECT columns FROM table1 LEFT JOIN table2 ON table1.common_field table2.common_field; LEFT JOIN&#xff08;或称为左外连接&#xff09;是SQL中的一种连接类型&#xff0c;它用于从两个或多个表中基于连接条件返回左表…...

Qt(9.28)

widget.cpp #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {QPushButton *btn1 new QPushButton("登录",this);this->setFixedSize(640,480);btn1->resize(80,40);btn1->move(200,300);btn1->setIcon(QIcon("C:…...

javascript-冒泡排序

前言&#xff1a;好久没学习算法了&#xff0c;今天看了一个视频课&#xff0c;之前掌握很好的冒泡排序居然没写出来&#xff1f; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport"…...

第九届蓝桥杯嵌入式省赛程序设计题解析(基于HAL库)

一.题目分析 &#xff08;1&#xff09;.题目 &#xff08;2&#xff09;.题目分析 按键功能分析----存储位置的切换键 a. B1按下切换存储位置&#xff0c;切换后定时时间设定为当前位置存储的时间 b. B2短按切换时分秒高亮&#xff0c;设置完成后&#xff0c;长按把设置的时…...

MATLAB云计算集成:在云端扩展计算能力

摘要 MATLAB云计算集成是指将MATLAB的计算能力与云平台的弹性资源相结合&#xff0c;以实现高性能计算、数据处理和算法开发。本文详细介绍了MATLAB云计算的基本概念、优势、配置要点以及编程实践。 1. 云计算概述 云计算是一种通过互联网提供计算资源&#xff08;如服务器、…...

基于BeagleBone Black的网页LED控制功能(flask+gpiod)

目录 项目介绍硬件介绍项目设计开发环境功能实现控制LED外设构建Webserver 功能展示项目总结 &#x1f449; 【Funpack3-5】基于BeagleBone Black的网页LED控制功能 &#x1f449; Github: EmbeddedCamerata/BBB_led_flask_web_control 项目介绍 基于 BeagleBoard Black 开发板…...