PHP(3)“判断回文数”算法问题

  原题目:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

  eg:

  

class test 
    {
         public function a3($number)
        {
            $num = $number;
      //输入的一个字符串,str_split分割为数组,判断数组第一个是否为“-”,如果为负数,一定不是回文数,也可加一个可否被10整除的判断
$num_arr = str_split($num); if ($num_arr[0] == '-') { return 0; } else {
      //定义back_num为$number反序,同理分割为数组
$back_num = strrev($number); $back_arr = str_split($back_num); $length = count($back_arr);
      //判断$num_arr与$back_arr的数组中的第i个是否一样
for ($i=0; $i < $length; $i++) { if ($num_arr[$i] != $back_arr[$i]) { return 0; } } echo $number; return $number; } } }

  如果是回文数,则输出,否,则返回false。

  这个我感觉是最容易理解的一种方法,也是最简单粗暴的,上面代码也可以用array_map这个函数,不过我感觉整体思路一样。

  当然还有另外一种思路,回文数这个东西,它是一串有特点的数,如果一个整数为回文数,那么它的前半部分与后半部分是一样的,所以其实咱们可以遍历输入整数长度的一半即可,具体看代码

class test 
    {
        public function a5($number)
          {
       //老规矩。。跟上面的一样
$num = $number; $num_arr = str_split($num); if($num_arr[0] == '-') { return 0; } else { $length = count($num_arr);
       //定义$mid为当前数组长度的一半,如果长度为奇数,向下取整 
$mid = floor($length/2); for ($i=0; $i < $mid; $i++) {
       //如果num_arr中,第i个与第length-1-i个都一样的话,就是回文数了,输出回文数
if ($num_arr[$i] != $num_arr[$length-1-$i]) return false; } echo $num; return $num; } } }

 

posted on 2018-09-06 15:09  邱二狗  阅读(1483)  评论(0编辑  收藏  举报

导航