【简单算法】回文数(C语言)

概述

注水博客,期末emo加摆烂,想做做简单算法抚慰心灵:

题目描述

9.回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

例如,121 是回文,而 123 不是。

示例 1:

输入:x = 121
输出:true

示例 2:

输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。

提示:

-231 <= x <= 231 - 1

解题思路

暴力解题:回文数判断时,一半的数字是要调换顺序来比较的,所以想到了先进后出的栈。先判断数字位数length,确定栈的大小为length/2,如果是奇数个数字(length%2!=0),跳过最中间数字。最后别忘了,负数直接判错。

代码

    /*大致思路*/
    //算出数字位数
    //用一个栈来存储判断一半的数字
bool isPalindrome(int x){

    if(x < 0) return false;//为负数直接判错

    int idx = 0;//循环控制变量
    int temp = x;//临时变量
    int length = 0;//数字位数
    int top = 0;//栈顶指针
    int stack[31] = {};

    // 判断长度
    for(idx = 0;idx < 31;++idx){
    //提示给出次方不超过31
    if(temp > 0) ++length;
    temp/=10;

    }

    // 入栈
    for(top = 0;top < length / 2;++top){
        
        stack[top] = x%10;//取末尾的数入栈
        x/=10;

    }

    // 比较
    if(length%2==1){x/=10;}//如果位数是奇数,跳过判断中间的数字
    for(top = length / 2 - 1;top > -1;--top){
        
        if(stack[top]!=x%10){return false;}
        x /= 10;
    }
    
    return true;
}

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/palindrome-number

你可能感兴趣的:(算法,数据结构,c语言)