C实现 LeetCode->Palindrome Number

Determine whether an integer is a palindrome. Do this without extra space.



判断一个 整形是不是 回文,不能使用额外的空间 



扩展 :(判断 一个字符串是不是回文  ;一个单链表是不是回文;一个栈是不是回文)




//
//  PalindromeNumber.c
//  Algorithms
//
//  Created by TTc on 15/6/6.
//  Copyright (c) 2015年 TTc. All rights reserved.
//

#include "PalindromeNumber.h"
#include <ctype.h>
#include <limits.h>

#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
/*
 分析与解法

回文判断是一类典型的问题,尤其是与字符串结合后呈现出多姿多彩,在实际中使用也比较广泛,而且也是面试题中的常客,所以本节就结合几个典型的例子来体味下回文之趣。

解法一

同时从字符串头尾开始向中间扫描字串,如果所有字符都一样,那么这个字串就是一个回文。采用这种方法的话,我们只需要维护头部和尾部两个扫描指针即可。
*/



/**
 *检查字符串s是不是回文, 字符串s的长度为n
 
 直白且效率不错的实现,时间复杂度:O(n),空间复杂度:O(2)。
 */
bool IsPalindrome(const char *s, int n)
{
    if (s == NULL || n < 1) return false; // 非法输入
    char *front, *back;
    front = s;
    back = s + n - 1; // 初始化头指针和尾指针
    while (front < back) {
        if (*front != *back)
            return false; // 不是回文,立即返回
        ++front;
        --back;
    }
    return true; // 是回文
    
}


static
int reverse(int x) {
    long long val = 0;
    do
    {
        val = val * 10 + x % 10;
        x /= 10;
    } while (x);
    
    return (val > INT_MAX || val < INT_MIN) ? 0 : val;
}

bool
isPalindrome(int x) {
    if(x < 0) return false;
    if(x < 10) return true;
    int y = 0;
    y = reverse(x);
    
    return x == y;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值