内容简介:当一个数字180度旋转后,不等于原来的数字,那么我们称它是一个好数字。例如,数字0、1和8在旋转180度后,等于它本身。2和5旋转后为对方。6和9也是如此。而其他数字在旋转后不等于任何数字。
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); } }
若觉得本文章对你有用,欢迎用 爱发电 资助。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。