【Day18】LeetCode算法刷题[1694. 重新格式化电话号码 ] [202.快乐数]

在这里插入图片描述

刷题打卡,第十八天

  • 题目一、1694. 重新格式化电话号码
  • 题目二、202.快乐数


题目一、1694. 重新格式化电话号码

原题链接:1694. 重新格式化电话号码

题目描述

给你一个字符串形式的电话号码 numbernumber数字空格 ' '、和破折号 '-' 组成。
请你按下述方式重新格式化电话号码。
首先,删除 所有的空格和破折号。
其次,将数组从左到右 每3 个一组 分块,直到 剩下 4 个或更少数字。剩下的数字将按下述规定再分块:
2 个数字:单个含 2 个数字的块。
3 个数字:单个含 3 个数字的块。
4 个数字:两个分别含 2 个数字的块。
最后用破折号将这些块连接起来。注意,重新格式化过程中 不应该 生成仅含 1 个数字的块,并且 最多 生成两个含 2 个数字的块。
返回格式化后的电话号码。
/
示例 1:
输入:number = “1-23-45 6”
输出:“123-456”
解释:数字是 “123456”
步骤 1:共有超过 4 个数字,所以先取 3 个数字分为一组。第 1 个块是 “123” 。
步骤 2:剩下 3 个数字,将它们放入单个含 3 个数字的块。第 2 个块是 “456” 。
连接这些块后得到 “123-456” 。
/
示例 2:
输入:number = “123 4-567”
输出:“123-45-67”
解释:数字是 “1234567”.
步骤 1:共有超过 4 个数字,所以先取 3 个数字分为一组。第 1 个块是 “123” 。
步骤 2:剩下 4 个数字,所以将它们分成两个含 2 个数字的块。这 2 块分别是 “45” 和 “67” 。
连接这些块后得到 “123-45-67” 。
/
示例 3:
输入:number = “123 4-5678”
输出:“123-456-78”
解释:数字是 “12345678” 。
步骤 1:第 1 个块 “123” 。
步骤 2:第 2 个块 “456” 。
步骤 3:剩下 2 个数字,将它们放入单个含 2 个数字的块。第 3 个块是 “78” 。
连接这些块后得到 “123-456-78” 。
/
示例 4:
输入:number = “12”
输出:“12”
/
示例 5:
输入:number = "–17-5 229 35-39475 "
输出:“175-229-353-94-75”

解题思路
按照题目要求,我们需要先删除多余的符号,空格“ ”与破折号“-”,然后再给字符串的数字分组。

需要删除多余的元素,就需要遍历字符串中的每一个数字,为此我们可以先获取字符串的长度,再使用charAt()方法遍历每个数字,当遇到空格或者破折号就忽略掉,其余的数字就存放进集合中,为接下来的分组做准备。

需要分组,我们依旧需要遍历集合中的元素,和上面的思路一致,获取集合长度,遍历集合,将集合中的元素重新组成字符串,每遍历到下标与3取模0时,就给字符串增添一个破折号“-”,这样就满足了三个数字一组的条件。

重复这样的操作,到最后无论是剩下两个元素,还是剩下三个元素,都能按照要求分组,唯一特殊的是剩下四个元素时,最后四个元素要两两分组。

我们就需要对这种情况另外处理,处理思路也很简单,集合只遍历到剩下四个元素中的排头元素,然后再给剩下的四个元素中间插入一个破折号“-”即可。

提交代码

class Solution {public String reformatNumber(String number) {int len = number.length();                //获取字符串长度List<Character> list = new ArrayList<>(); //创建集合,存放字符串字符for(int i = 0;i < len;++i){               //遍历字符串char ch = number.charAt(i);           if(ch != '-' && ch != ' '){           //忽略字符串中的" "和"-"list.add(ch);                     //字符存入数组中}}int size = list.size();                   //获取数组长度number = "";                              //清空字符串if(size % 3 == 1){                          //如果最终会剩下4个数字number = build(number,0,size-3,list);   //将之前的数字分成3个一组number = build(number,size-3,size,list);//将最后四个数字分成2个一组}else{                                      //如果最后剩下4个以下数组number = build(number,0,size,list);     //前面按照3个一组,而最后剩下的一组}return number; //返回重新格式化后的字符串}//这是遍历集合,对字符串进行格式化的方法,参数包含 集合,遍历的起点和终点,字符串public String build(String number,int start,int size,List list){for(int i = start;i < size;++i){ //遍历集合if(start == 0){              //从0开始时if(i % 3 == 0 && i != 0)  //每三个数字就添加一个"-"符号number += "-";}else{                        //遍历最后四个数字时if(i == size-2)          //在四个数字中间添加"-"符号number += "-";} number += list.get(i);}return number;                   //返回处理后的字符串}}

提交结果

在这里插入图片描述


题目二、202.快乐数

原题链接:202.快乐数

题目描述

编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」 定义为:
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n 是 快乐数 就返回 true ;不是,则返回 false 。
/
示例 1:
输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
/
示例 2:
输入:n = 2
输出:false

解题思路
每当我们获取一个正整数,我们都要获取这个数每个位置上数字的平方和;

这时我们就需要通过循环来遍历一个正整数每个位置上的数字,再将每个数字与自己相乘,一并累加起来,就得到了平方和。

难题就在于,如果平方和不能等于一,就需要不断去求取新的平方和,最终陷入死循环。

为此,破局的关键就在于识别操作是否会进入死循环,其实这个问题并不算难,当进入了循环,曾经出现过的平方和将会重复循环地出现,当我们遇到重复的平方和时,就能判断它始终不为一,返回false。

为了判断是否重复,我们就需要用到存放不可重复数据的集合Set,将平方和存入Set集合中,当新的平方和在集合中出现了,我们就可以返回false,当新的平方和等于一了,我们就可以返回true

提交代码

class Solution {public int happy(int num){int sum = 0;        //用于记录每个位置上的数字的平方和while(num > 0){     //循环遍历每个位置上的数字int d = num%10; //通过对10取模获取最末位数字sum += d*d;     //获取平方和num /= 10;      //遍历前一位置数字}return sum;         //返回此次平方和}public boolean isHappy(int n) {Set<Integer> set = new HashSet<>(); //创建内容不可重复的集合Setwhile(n != 1 && !set.contains(n)){  //重复遍历平方和,知道遇到1或死循环set.add(n);                     //平方和没有重复,记录进集合n = happy(n);                   //调用方法,获取下一个平方和}if(n == 1) return true;             //n等于一,返回truereturn false;                       //否则,返回false}
}

提交结果

在这里插入图片描述


求关注⚽ 作者🥇 .29. 🥇 的✔博客主页✔
来刷题⚽ 记录每日LeetCode✔刷题专栏✔
您的点赞收藏以及关注是对作者最大的鼓励喔 ~~

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/19019.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

List解答LeetCode杨辉三角

作者&#xff1a;月亮嚼成星~ 博客主页&#xff1a;月亮嚼成星~的博客主页 专栏&#xff1a;数据结构与算法 工欲善其事必先利其器&#xff0c;给大家介绍一款超牛的斩获大厂offer利器——牛客网 点击免费注册和我一起刷题吧 目录 了解杨辉三角 题目要求&#xff1a; 解答思…

张朝阳开课手推E=mc²,李永乐现场狂做笔记!CEO当太久都忘了他是MIT物理博士...

晓查 萧箫 明敏 鱼羊 发自 凹非寺量子位 | 公众号 QbitAI 张朝阳当物理老师还真是当上瘾了。 刚刚直接完成了一场线下课&#xff0c;当场手推质能方程&#xff0c;一整面黑板墙都差点没盛下。 这个姿势&#xff0c;是不是有你大物老师内范儿了&#xff08;手动狗头&#xff09;…

文心一言 VS 讯飞星火 VS chatgpt (25)-- 算法导论4.2 7题

七、设计算法&#xff0c;仅使用三次实数乘法即可完成复数 abi和cdi 相乘。算法需接收a、b、c和d 为输入&#xff0c;分别生成实部 ac-bd 和虚部adbc。 文心一言&#xff1a; 可以使用如下算法来计算复数 abi 和 cdi 的积&#xff0c;且只需进行三次实数乘法&#xff1a; 1.…

文心一言 VS 讯飞星火 VS chatgpt (24)-- 算法导论4.2 6题

六、用Strassen 算法作为子进程来进行一个 knn 矩阵和一个nkn 矩阵相乘&#xff0c;最快需要花费多长时间?对两个输入矩阵规模互换的情况&#xff0c;回答相同的问题。 文心一言&#xff1a; Strassen 算法是一种用于矩阵乘法的分治算法&#xff0c;它将原始的矩阵分解为较小…

文心一言 VS 讯飞星火 VS chatgpt (41)-- 算法导论5.4 5题

五、在大小为n的集合中&#xff0c;一个k字符串构成一个k排列的概率是多少?这个问题和生日悖论有什么关系? 文心一言&#xff1a; 在大小为n的集合中&#xff0c;一个k字符串构成一个k排列的概率是1/k!&#xff0c;这是由于排列的总数是k!&#xff0c;而每个字符串被选中的…

文心一言 VS 讯飞星火 VS chatgpt (18)-- 算法导论4.1 5题

五、使用如下思想为最大子数组问题设计一个非递归的、线性时间的算法。从数组的左边界开始&#xff0c;由左至右处理&#xff0c;记录到目前为止已经处理过的最大子数组。若已知 A[1…j]门的最大子数组&#xff0c;基于如下性质将解扩展为 A[1…j1]的最大子数组:A[1…j1]的最大…

张朝阳开课手推E=mc²,李永乐现场狂做笔记!CEO当太久都忘了他是MIT物理博士

张朝阳当物理老师还真是当上瘾了。 刚刚直接完成了一场线下课&#xff0c;当场手推质能方程&#xff0c;一整面黑板墙都差点没盛下。 这个姿势&#xff0c;是不是有你大物老师内范儿了&#xff08;手动狗头&#xff09;。 ‍没地方继续推导了&#xff0c;擦黑板前还要感慨一句…

AI 绘画 - 建筑绘图辅助设计之 SD 基础

前情提要 如果你想学会一门东西&#xff0c;那么就给交给自己一个明确的任务&#xff0c;然后独立完成&#xff0c;之后我们就可以掌握这门技术了&#xff1b; 简介 SD建筑绘画主要目的是将建筑概念转化为可视化的表达形式&#xff0c;以便更好地传达设计理念给业主、团队成…

AI 绘画 - 建筑绘图辅助设计之模型训练

前情提要 2023-06-18 周日 杭州 小雨 小记: 昨天搞的好累&#xff0c;10点左右就想着先躺一会儿&#xff0c;然后就睡过去了&#xff0c;很奇怪&#xff0c;如果进行 AI 绘画&#xff0c;晚上就会做很奇怪的梦&#xff0c;说不上来的那种感觉&#xff0c;就是莫名的不舒服。 …

如何使用Midjourney辅助建筑设计,常用的提示和使用效果展示(内附Midjourney提示词网站)

文章目录 一.Midjourney建筑设计的提示技巧1. prompt模板12.prompt模板2 二、著名建筑师为例1.Zaha Hadid&#xff08;扎哈哈迪德&#xff09;2.Ludwig Mies van der Rohe&#xff08;路德维希密斯凡德罗&#xff09;3.Renzo Piano&#xff08;皮亚诺&#xff09;4.Stefano Boe…

解药 or 毒药:ChatGPT辅助设计,规划师和建筑师要失业了吗?

​人工智能聊天机器人ChatGPT火爆全球&#xff0c; 规划师笔记也紧赶潮流&#xff0c;快速尝试&#xff0c; AI与设计发生碰撞&#xff0c; 会产生怎样的火花&#xff1f; 运用AI帮助写文案、作图、视频剪辑、游戏制作等等随着2021被称为元宇宙元年&#xff0c;近些年来AI在…

谈人工智能AI的崛起:是威胁人类的革命性变革?--元理先生

随着OpenAI推出ChatGPT后&#xff0c;全球都在疯狂的推进人工智能的发展进程&#xff0c;而人工智能的迅速发展和应用&#xff0c;使我们面临着一个前所未有的挑战&#xff1a;人工智能是否将威胁到人类工作岗位的存在&#xff1f;元理先生将与大家探讨人工智能可能对人类工作造…

欧盟又出手!这次盯上了AI

今年称之为AI大年&#xff0c;一点都不为过。一个ChatGPT就引爆了全球的AI产业&#xff0c;它就像一颗久旱逢甘霖的草木&#xff0c;野蛮生长着。 木秀于林&#xff0c;AI风头正盛。作为全球最活跃的经济联盟之一&#xff0c;欧盟毫无疑问地也盯上了AI这个大明星。欧盟委员会执…

冯·诺依曼发表《第一份草案》 | 历史上的今天

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 6 月 30 日。在电影史上&#xff0c;电影发展中一个重要步骤是彩色电影于 1930 年左右引入市场&#xff0c;而在 1948 年的今天&#xff0c;梅兰芳主演中国第一…

web前端Vue项目搭建流程

Node.js安装教程 一、安装环境 node.js下载官网: nodejs官网. 二、安装步骤 1、双击安装包&#xff0c;一直点击下一步。 2、点击change按钮&#xff0c;更换到自己的指定安装位置&#xff0c;点击下一步&#xff08;不修改默认位置也是可以的 &#xff09;。 3、一直点击下一步…

ChatGPT搭建AI网站实战

1.概述 ChatGPT是一款基于GPT-3.5架构的大型语言模型&#xff0c;它能够进行自然语言处理和生成对话等任务。作为一款智能化的聊天机器人&#xff0c;ChatGPT有着广泛的应用场景&#xff0c;如在线客服、智能助手、个性化推荐等。今天笔者给大家分享一下如何使用ChatGPT的API模…

20230623百度 Vs Google,百度差在哪里?【喊话李彦宏:为中华造芯IC】

20230623百度 Vs Google&#xff0c;百度差在哪里&#xff1f; 2023/6/23 18:45 百度搜索&#xff1a;google PDK 【百度可以为未来长期投资什么】 https://blog.csdn.net/cf2SudS8x8F0v/article/details/126187739 人人皆可免费造芯&#xff1f;谷歌开源芯片计划已释放90nm、…

2023年网络安全趋势

数据安全越来越重要。 我国《数据安全法》提出“建立健全数据安全治理体系”&#xff0c;各地区部门均在探索和简历数据分类分级、重要数据识别与重点保护制度。 数据安全治理不仅是一系列技术应用或产品&#xff0c;更是包括组织构建、规范制定、技术支撑等要素共同完成数据…

大模型时代下的全新变革

大模型的技术突破为人类的技术视野撕开全新AI宇宙的一角&#xff0c;让人类立刻畅想万花筒般的未来。当相信成为一种力量&#xff0c;它将助推不可估量的飞跃发展。在九章云极DataCanvas新产品发布会上&#xff0c;九章云极DataCanvas公司董事长方磊从AI科技企业角度阐述了独到…

ChatGPT实践应用和大模型技术解析

点击蓝字 关注我们 关注并星标 从此不迷路 计算机视觉研究院 公众号ID&#xff5c;计算机视觉研究院 学习群&#xff5c;扫码在主页获取加入方式 计算机视觉研究院专栏 Column of Computer Vision Institute 从技术原理、实战、应用等多维角度&#xff0c;共同探讨ChatGPT和大模…