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

Leetcode 2119.反转两次的数字

反转 一个整数意味着倒置它的所有位。

  • 例如,反转 2021 得到 1202 。反转 12300 得到 321 ,不保留前导零 。

给你一个整数 num ,反转 num 得到 reversed1 ,接着反转 reversed1 得到 reversed2 。如果 reversed2 等于 num ,返回 true ;否则,返回 false 。

示例 1:

输入:num = 526
输出:true
解释:反转 num 得到 625 ,接着反转 625 得到 526 ,等于 num 。

示例 2:

输入:num = 1800
输出:false
解释:反转 num 得到 81 ,接着反转 81 得到 18 ,不等于 num 。 

示例 3:

输入:num = 0
输出:true
解释:反转 num 得到 0 ,接着反转 0 得到 0 ,等于 num 。

一、信息

1.反转的定义

2.这道题目的目的是给我一个整数num,反转num得到reversed1,接着反转reversed1得到reversed2,如果reversed2等于num,返回true否则false

二、分析

条件1:告诉我反转是什么

条件2:告诉我返回值的类型和规则,其实很简单因为返回torf因此我们可以定义函数的类型位布尔类型返回布尔值即可。

思路:

看到这道题目我有一条思路

第一条路:我们可以用取余和取百分比的不断获取整数num的个十百千位然后逆序然后再用同样的函数调用一边即可我的答案的第一部分首先考虑了实现一个反转整数的函数。我采用了常见的通过模10取余数得到数字的最后一位,然后整除10来移除最后一位的方法,来实现整数的反转。这个思考过程较为直接和基础,是初学者常用的解题方法。

第二条思路

五、实现 

我的答案:

C++:

#include <stdio.h>
#include <stdbool.h>int reverse(int num) {int reversed = 0;while (num > 0) {int remainder = num % 10;reversed = reversed * 10 + remainder;num = num / 10;}return reversed;
}bool isReversedTwiceTheSame(int num) {int reversed1 = reverse(num);int reversed2 = reverse(reversed1);return reversed2 == num;
}int main() {int num1 = 526;int num2 = 1800;int num3 = 0;printf("%d -> %s\n", num1, isReversedTwiceTheSame(num1) ? "true" : "false");printf("%d -> %s\n", num2, isReversedTwiceTheSame(num2) ? "true" : "false");printf("%d -> %s\n", num3, isReversedTwiceTheSame(num3) ? "true" : "false");return 0;
}

Leetcode题解:

 源代码:

#include <stdbool.h>bool isSameAfterReversals(int num) {return num == 0 || num % 10 != 0;
}

总结:

学到了什么?

从这道题目中,我们可以学到几个关键的概念和编程实践:

1. **数学思维**:
   - **充分必要条件**的思考是解题的关键。首先考虑何时两次反转会得到原数,然后思考这些条件是不是必要的,是不是充分的。
   - **模运算**:通过对10取模来判断一个数的个位数。

2. **编程思维**:
   - 逻辑简化:题目可能看起来复杂,需要多步操作,但有时候通过逻辑推理和数学运算可以极大地简化问题,例如这道题目中,无需实际进行反转操作,通过判断就可以得到结果。
   - 代码优化:简化逻辑并不总是降低代码的可读性。在许多情况下,它实际上会使代码变得更清晰,更易于理解,同时还提高了代码的效率。

3. **细节处理**:
   - 对于特殊的边界情况,例如这里的0,需要单独考虑。
   - 注意题目中的条件限制和例子,这会帮助我们更快地理解题目要求。

4. **问题分析与解决策略**:
   - 在解决问题时,我们首先需要深入理解问题,分析问题的本质。这道题的本质是考察反转操作对数的位数的影响,以及如何通过数学方法简化计算。
   - 其次,我们需要寻找解决问题的策略。这可能涉及到对问题进行逐步分解,或者转化为更容易解决的问题。

通过综合运用数学知识、编程技能、逻辑分析和解决问题的策略,我们可以更有效地解决编程问题。

http://www.lryc.cn/news/180154.html

相关文章:

  • BI神器Power Query(27)-- 使用PQ实现表格多列转换(3/3)
  • VUE3照本宣科——认识VUE3
  • 《计算机视觉中的多视图几何》笔记(12)
  • TFT LCD刷新原理及LCD时序参数总结(LCD时序,写的挺好)
  • 基于Java的电影院购票系统设计与实现(源码+lw+部署文档+讲解等)
  • Linux基础指令(六)
  • Anderson-Darling正态性检验【重要统计工具】
  • Ubuntu基于Docker快速配置GDAL的Python、C++环境
  • <C++> 哈希表模拟实现STL_unordered_set/map
  • 【数据结构与算法】通过双向链表和HashMap实现LRU缓存 详解
  • MySQL的内置函数
  • 数据结构与算法-(7)---栈的应用-(3)表达式转换
  • Lilliefors正态性检验(一种非参数统计方法)
  • 【云原生】配置Kubernetes CronJob自动备份MySQL数据库(单机版)
  • 基于PSO算法的功率角摆动曲线优化研究(Matlab代码实现)
  • 数论知识点总结(一)
  • 知识分享 钡铼网关功能介绍:使用SSLTLS 加密,保证MQTT通信安全
  • asp.net core mvc区域路由
  • KNN(下):数据分析 | 数据挖掘 | 十大算法之一
  • Servlet开发-session和cookie理解案例-登录页面
  • Polygon Miden:扩展以太坊功能集的ZK-optimized rollup
  • [题]宝物筛选 #单调队列优化
  • .NET的键盘Hook管理类,用于禁用键盘输入和切换
  • Anaconda Jupyter
  • Unity中Shader的前向渲染路径ForwardRenderingPath
  • 简历项目优化关键方法论-START
  • TensorFlow学习1:使用官方模型进行图片分类
  • C++ 并发编程实战 第八章 设计并发代码 一
  • 设计模式8、装饰者模式 Decorator
  • 抖音开放平台第三方代小程序开发,一整套流程