D71 788. Rotated Digits
题目链接
题目分析
当一个数字180度旋转后,不等于原来的数字,那么我们称它是一个好数字。
例如,数字0、1和8在旋转180度后,等于它本身。2和5旋转后为对方。6和9也是如此。而其他数字在旋转后不等于任何数字。
给定一个数字,返回从1到这个数字之间有多少个好数字。
思路
用range函数生成1到给定数组之间的所有数组。
用array_filter函数对每一个数字进行一个操作。
对每一个数字,用str_split和array_count_values函数处理。
当包含3、4或7时,因为旋转180度后不等于任何数字,因此这个不是一个好数字。故直接返回false排除当前数字。
对数字2,转换成5。对可旋转的数字进行相同处理。
判断旋转后的数字是否等于原数字。不同则返回true保留当前数字,作为好数字。否则返回false,排除当前数字。
用count函数返回好数字的数量。
最终代码
<?php
class Solution {
/**
* @param Integer $N
* @return Integer
*/
function rotatedDigits($N) {
$all = range(1,$N);
$good = array_filter($all, function($val){
$vs = str_split($val);
$cnt = array_count_values($vs);
if(isset($cnt[3]) || isset($cnt[4]) || isset($cnt[7])){
return false;
}
$newvs = array_map(function($va){
switch($va){
case 2: return 5;
case 5: return 2;
case 6: return 9;
case 9: return 6;
default:
return $va;
}
},$vs);
return intval(implode($newvs)) != $val;
});
return count($good);
}
}
若觉得本文章对你有用,欢迎用爱发电资助。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。