首页 > 其他分享 >Leetcode-007

Leetcode-007

时间:2024-06-10 12:01:14浏览次数:20  
标签:10 int -- 123 007 ans INT Leetcode

题目7.整数反转

难度:中等

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

示例 1:

输入:x = 123
输出:321

示例 2:

输入:x = -123
输出:-321

示例 3:

输入:x = 120
输出:21

示例 4:

输入:x = 0
输出:0

提示:

  • -231 <= x <= 231 - 1

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

整数翻转,123 --> 3 * 10+2 --> 32 * 10+1 -->321

想到另一个整数拼接的思路 123 --> 123 * 10+1 --> 1231 * 10 +2 --> 12312 * 10 +3 -->123123

再一个就是整数对称的思路 123 --> 123 * 10+3 --> 1231 * 10 +2 --> 12312 * 10 +1 -->123321

解题代码

//	123  321
//	-123 -321
//	0    0
#include <iostream>

class Solution {
public:
    int reverse2(int x) {
        int ans = 0;
        while(x != 0)
        {
            if(ans > INT_MAX || ans < INT_MIN)
                return 0;
            ans = ans * 10 + x % 10;
            x /= 10;
        }
        return ans;
    }
};
//数字对称
//123 123321
//-8 -88
//-10 -1001
int symmetryReverse(int x) {
        using namespace std;
        int ans = x;
        while(x != 0)
        {
            if(ans > INT_MAX || ans < INT_MIN)
                return 0;
            ans = ans * 10 + x % 10;
            //cout<<ans<<endl;
            x /= 10;
        }
        return ans;
    }
//数字重复
//105 105105
//10  1010
//1   11
int digitalRepeated(int x) {
        using namespace std;
        
        int ans = x;
        int num = 1 + log10(x);  //位数
        for (int i = num - 1; i >= 0; i--) {
            if (ans == 0 || ans > INT_MAX || ans < INT_MIN)      //用for要注意0或者溢出
                return 0;
            int maxdigit = (int) pow(10, i);
            // cout<<ans<<endl;
            ans = ans * 10 + (x / maxdigit) % 10;
            x %= maxdigit;
        }
        return ans;
    }

由这一题抽象出对数字的常规算法,详情见数字切片

标签:10,int,--,123,007,ans,INT,Leetcode
From: https://www.cnblogs.com/cosmos42/p/18240559

相关文章

  • Q22 LeetCode142 环形链表
    1.使用快慢指针2.快指针向后移动两个位置,慢指针向后移动一个位置3.若快慢指针能相等,则有环4.将一个指针指向head,一个指针指向fast,挨个向后遍历,相等即进环点 1publicclassSolution{2publicListNodedetectCycle(ListNodehead){3ListNodequickInd......
  • Q21 LeetCode02.07 链表相交
    1.求出两链表长度2.分情况进行长链表头结点后移3.移至相同长度,两头结点一起后移,找到公共节点 1publicclassSolution{2publicListNodegetIntersectionNode(ListNodeheadA,ListNodeheadB){34ListNodecurA=headA;5ListNod......
  • Q20 LeetCode19 删除链表倒数第N个节点
    1.创建虚拟头结点ListNodepre=newListNode(0,head);2.创建快慢节点3.快节点fastIndex先往后移N个位置4.快慢slowIndex节点一直往后移,直至快节点到链表末尾5.删除慢节点后面的节点 1classSolution{2publicListNoderemoveNthFromEnd(ListNodehead,intn){......
  • LeetCode 算法:除自身以外数组的乘积c++
    原题链接......
  • Leetcode1161. 最大层内元素和
    EverydayaLeetcode题目来源:1161.最大层内元素和解法1:层序遍历每次以「层」为单位进行拓展,统计该层的元素和,维护处理过程中的最大值层数和,以及层深度。代码:/**@lcapp=leetcode.cnid=1161lang=cpp**[1161]最大层内元素和*///@lccode=start/***......
  • (nice!!!)LeetCode 312. 戳气球(区间dp ||记忆化dfs )
    312.戳气球思路:经典区间dp问题。方法一,区间dp。状态dp[i][j]表示:ij这个区间能获得的最大硬币数量。那么我们就可以枚举区间ij的每一个点,为该区间最后一个戳破的气球。细节看注释classSolution{public:intmaxCoins(vector<int>&nums){intn=nums.siz......
  • Q19 LeetCode24 两两交换链表节点
    1.注意节点交换顺序,以防节点丢失2.ListNodedummy=newListNode(0,head);定义空指针,并指向head节点 好语句3.还是虚拟头结点好用 1classSolution{2publicListNodeswapPairs(ListNodehead){3ListNodedummy=newListNode(0,head);4......
  • Q17 LeetCode707 设计链表
     无1classMyLinkedList{2intsize;3ListNodehead;45publicMyLinkedList(){6size=0;7head=newListNode(0);8}910publicintget(intindex){11if(index<0||index>=size)......
  • 【leetcode 1510 石子游戏】【记忆化搜索】
    存在和对于一切的语言importjava.util.Arrays;classSolution{publicbooleanwinnerSquareGame(intn){dp=newBoolean[n+1];dp2=newBoolean[n+1];Arrays.fill(dp,null);Arrays.fill(dp2,null);dp[0]=fa......
  • 每日一题(LeetCode · 35)搜索插入位置
    题目:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(logn) 的算法。示例1:输入:nums=[1,3,5,6],target=5输出:2示例 2:输入:nums=[1,3,5,6],target......