標籤:函數 array span rev style 一半 ima alt 演算法
原題目:判斷一個整數是否是迴文數。迴文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。
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; } } }
PHP(3)“判斷迴文數”演算法問題