來源:互聯網
上載者:User
關鍵字
php
node.js
html5
photoshop
假如輸入一個數222246787
計算出來是4連號
假如輸入一個數342222267
計算出來是5連號
.......
求代碼思路
回複內容:
假如輸入一個數222246787
計算出來是4連號
假如輸入一個數342222267
計算出來是5連號
.......
求代碼思路
用正則也可以處理,只需要三行代碼
function test($num){ preg_match_all("/(\d)\\1+/",$num,$match); rsort($match[0],SORT_NUMERIC); return strlen($match[0][0])?:1;}echo test("222246787");// 4echo test(342222267); // 5
把輸入的數當作字串處理,用一個數字記錄最大的連數(maxCount),初始值為0,一個記錄當前的連數(count)
從下標為1的字元開始,如果當前字元等於它的前一個那麼count++,如果不相等count=1
然後maxCount=max(maxCount,count)
1- 設當前號碼是 currentNumber = false;
2- 設當前號碼連續出現次數是 currentNumberTimes = 1;
3- 設最大連續出現次數是 maxTimes = 0;
4- 設最大連續出現次數對應的數字是 maxTimesNumber = false;
5- 將數字轉為字串,順序讀取每一位,該位的值存入變數 n
6- 將 n 和 currentNumber對比,如果一致 currentNumberTimes ++,否則:
6.1 用currentNumberTimes和maxTimes對比,如果大於maxTimes, maxTimes = currentNumberTimes; maxTimesNumber = currentNumber
6.2 currentNumber = n,currentNumberTimes = 1
7- maxTimesNumber為所求數字, maxTimes為連續出現的次數
註:如果出現相同長度的連續數字,取值為第一個,如 111222,maxTimesNumber = 1, maxTimes = 3
$number = '43124321333334124233343223900';$currentNumber = false;$currentNumberTimes = 1;$maxTimes = 0;$maxTimesNumber = false;for ($i = 0, $l = strlen($number); $i < $l; $i ++ ) { $n = $number[$i]; if ($n === $currentNumber) { $currentNumberTimes ++; } else { if ($currentNumberTimes > $maxTimes) { $maxTimes = $currentNumberTimes; $maxTimesNumber = $currentNumber; } $currentNumberTimes = 1; $currentNumber = $n; }}echo "數字{$maxTimesNumber}連續出現了{$maxTimes}次。\n";//數字3連續出現了5次。