### 獲取最長公共前綴
~~~
?/**
? * Notes: 最長公共前綴
? * @Interface longestCommonPrefix
? * @param $strs
? * @return false|mixed|string
? * @author: Administrator - virus
? * @Time: 2021/4/20 17:05
? */
?function longestCommonPrefix($strs)
?{
? ? ?if (count($strs) == 0) {
? ? ? ? ?return "";
? ? }
? ? ?if (count($strs) == 1) {
? ? ? ? ?return $strs[0];
? ? }
? ? ?$ans = $strs[0];
? ? ?for ($i = 1; $i < count($strs); $i++) {
? ? ? ? ?for ($j = 0; $j < strlen($ans), $j < strlen($strs[$i]); $j++) {
? ? ? ? ? ? ?if ($ans[$j] != $strs[$i][$j]) {
? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? ?$ans = substr($ans, 0, $j);
? ? ? ? ?if ($ans == "")
? ? ? ? ? ? ?return $ans;
? ? }
? ? ?return $ans;
?}
~~~
### 輸出一個數的所有加法的排列組合
1. 輸出所有組合
~~~
?/*
? * 4
? * 1+1+1+1
? * 2+2
? * 1+3
? * 3+1
? * */
?function climbStairs($n, $i = 1)
?{
? ? ?if ($i > $n / 2) {
? ? } else {
? ? ? ? ?$b = $n - $i;
? ? ? ? ?echo "{$n} = {$i} + {$b} \n";
? ? ? ? ?climbStairs($n, $i + 1);
? ? }
?}
~~~
2. 獲取所有組合
~~~
?function change($n, $i = 1)
?{
? ? ?$arr = [];
? ? ?while ($i <= $n / 2) {
? ? ? ? ?$b = $n - $i;
? ? ? ? ?$a = [$i, $b];
? ? ? ? ?array_push($arr, $a);
? ? ? ? ?$i++;
? ? }
? ? ?return $arr;
?}
~~~
### 統計數組中只出現一次的數字
~~~
?/**
? * Notes: 只出現一次的數字
? * Function: singleNumber
? * @param $nums
? * @return int|string
? * @author: Administrator - virus
? * Time: 2021/4/30 14:10
? */
?function singleNumber($nums)
?{
? ? ?$nums = array_count_values($nums);
? ? ?foreach ($nums as $k => $v) {
? ? ? ? ?if ($v == 1) {
? ? ? ? ? ? ?return $k;
? ? ? ? }
? ? }
?}
~~~
### 整數反轉
~~~
?/**
? * Notes: 整數反轉
? * Function: reverse
? * @param $x
? * @return float|int
? * @author: Administrator - virus
? * Time: 2021/5/7 10:09
? */
?function reverse($x)
?{
? ? ?if ($x < 0) {
? ? ? ? ?return -$this->reverse(-$x);
? ? } elseif ($x === 0) {
? ? ? ? ?return 0;
? ? } else {
? ? ? ? ?$reversed = 0;
? ? ? ? ?while ($x !== 0) {
? ? ? ? ? ? ?$reversed = $reversed * 10 + $x % 10;
? ? ? ? ? ? ?$x = (int)($x / 10);
? ? ? ? }
? ? ? ? ?return $reversed < 0 || $reversed >= 2 ** 31 ? 0 : $reversed;
? ? }
?}
~~~
### 計算兩個數組的交集,且不重復
~~~
?/**
? * Notes: 計算兩個數組的交集,且不重復
? * Function: intersection
? * @param $nums1
? * @param $nums2
? * @return array
? * @author: Administrator - virus
? * Time: 2021/5/10 13:41
? */
?function intersection($nums1, $nums2)
?{
? ? ?$tmp = [];
? ? ?foreach ($nums1 as $k1 => $v1) {
? ? ? ? ?if (in_array($v1, $nums2)) {
? ? ? ? ? ? ?if (!in_array($v1, $tmp)) {
? ? ? ? ? ? ? ? ?array_push($tmp, $v1);
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? ?return $tmp;
?}
~~~
升級版
~~~
?/**
? * Notes: 計算兩個數組的交接,升級內容
? * Function: intersection_ii
? * @param $nums1
? * @param $nums2
? * @return array
? * @author: Administrator - virus
? * Time: 2021/5/10 15:37
? */
?function intersection_ii($nums1, $nums2)
?{
? ? ?$arr = [];
? ? ?for ($i = 0; $i < count($nums1); $i++) {
? ? ? ? ?$index = array_search($nums1[$i], $nums2);
? ? ? ? ?//當元素在nums2中存在是,將該元素插入arr并在nums2中將該元素刪除
? ? ? ? ?if ($index > -1) {
? ? ? ? ? ? ?array_push($arr, $nums1[$i]);
? ? ? ? ? ? ?// 在nums2中將該元素刪除
? ? ? ? ? ? ?array_splice($nums2, $index, 1);
? ? ? ? }
? ? }
? ? ?return $arr;
?}
~~~
### 返回數組元素的第三大的數,相同的值算一個
~~~
?/**
? * Notes: 返回數組元素的第三大的數,相同的值算一個
? * Function: thirdMax
? * @param $nums
? * @return mixed
? * @author: Administrator - virus
? * Time: 2021/5/11 9:19
? */
?function thirdMax($nums)
?{
? ? ?$len = count($nums);
? ? ?if ($len < 3) {
? ? ? ? ?return max($nums);
? ? }
? ? ?asort($nums);
? ? ?$nums = array_values(array_unique($nums));
? ? ?if (count($nums) < 3) {
? ? ? ? ?return max($nums);
? ? }
? ? ?$result_index = count($nums) - 3;
? ? ?return $nums[$result_index];
?}
~~~
### 二分查找元素
~~~
?/**
? * Notes: 二分查找元素
? * Function: twoSearch
? * @param $nums
? * @param $target
? * @return int
? * @author: Administrator - virus
? * Time: 2021/6/1 8:38
? */
?function twoSearch($nums, $target)
?{
? ? ?$len = count($nums);
? ? ?$low = 0;
? ? ?$high = $len - 1;
? ? ?while ($low <= $high) {
? ? ? ? ?$mid = intval(($low + $high) / 2);
? ? ? ? ?if ($nums[$mid] > $target) {
? ? ? ? ? ? ?// 查找的目標比參照點小,舍去右邊的
? ? ? ? ? ? ?$high = $mid - 1;
? ? ? ? } elseif ($nums[$mid] < $target) {
? ? ? ? ? ? ?// 查找的目標比參照點大,舍去左邊的
? ? ? ? ? ? ?$low = $mid + 1;
? ? ? ? } else {
? ? ? ? ? ? ?// 查找目標與參照點相等
? ? ? ? ? ? ?return $mid;
? ? ? ? }
? ? }
? ? ?// 未找到,返回-1
? ? ?return -1;
?}
~~~
案例:在目標數組里找出和為目標的2個數的索引下標 + 1顯示
~~~
?/**
? * Notes: 在目標數組里找出和為目標的2個數的索引下標 + 1顯示
? * 利用二分查找
? * Function: twoSum
? * @param $numbers
? * @param $target
? * @return array|int[]
? * @author: Administrator - virus
? * Time: 2021/6/1 9:08
? */
?function twoSum($numbers, $target)
?{
? ? ?if (!is_array($numbers)) {
? ? ? ? ?return [-1, -1];
? ? }
? ? ?if (empty($target)) {
? ? ? ? ?return [-1, -1];
? ? }
? ? ?$len = count($numbers);
? ? ?for ($i = 0; $i < $len; $i++) {
? ? ? ? ?$low = $i + 1;
? ? ? ? ?$high = $len - 1;
? ? ? ? ?while ($low <= $high) {
? ? ? ? ? ? ?$mid = intval(($low + $high) / 2);
? ? ? ? ? ? ?if ($numbers[$mid] > $target - $numbers[$i]) {
? ? ? ? ? ? ? ? ?$high = $mid - 1;
? ? ? ? ? ? } elseif ($numbers[$mid] < $target - $numbers[$i]) {
? ? ? ? ? ? ? ? ?$low = $mid + 1;
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ?return [$i + 1, $mid + 1];
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? ?return [-1, -1];
?}
??
~~~
~~~
?/**
? * Notes: 二分查找,折半查找 遞歸
? * Function: guess
? * @param $randNum
? * @param $minNum
? * @param $maxNum
? * @param int $guessNum
? * @return mixed
? * @author: Administrator - 仙工
? * Time: 2021/6/8 11:31
? */
?function guess($randNum, $minNum, $maxNum, $guessNum = 1)
?{
? ? ?//二分查找,除以2
? ? ?$num = intval(($maxNum - $minNum) / 2);
? ? ?//中間值不能直接比較,需要再加上最小值,例如50-100,(100-50)/2等于25,中間值是50+25等于75
? ? ?$guessValue = $num + $minNum;
? ? ?echo "猜測第{$guessNum}次:{$guessValue}\n";
? ? ?if ($guessValue == $randNum) {
? ? ? ? ?return $randNum;
? ? } elseif ($guessValue > $randNum) {
? ? ? ? ?// 猜測值大于實際值
? ? ? ? ?return guess($randNum, $minNum, $guessValue, $guessNum + 1);
? ? } elseif ($guessValue < $randNum) {
? ? ? ? ?// 猜測值小于實際值
? ? ? ? ?return guess($randNum, $guessValue, $maxNum, $guessNum + 1);
? ? }
?}
~~~
### 判斷一個字符串里的所有字符是否唯一
~~~
?/**
? * Note: 判斷一個字符串里的的所有字符是否唯一
? * @param String $astr
? * @return bool
? */
?function isUnique($astr)
?{
? ? ?$temp = [];
? ? ?$len = strlen($astr);
? ? ?for ($i = 0; $i < $len; $i++) {
? ? ? ? ?if (isset($temp[$astr[$i]])) {
? ? ? ? ? ? ?return false;
? ? ? ? } else {
? ? ? ? ? ? ?$temp[$astr[$i]] = true;
? ? ? ? }
? ? }
? ? ?return true;
?}
~~~
### 判斷兩個字符串的字符是否一致
~~~
?/**
? * 字符串 s1 和 s2 的字母是否一致
? * @param String $s1
? * @param String $s2
? * @return Boolean
? */
?function CheckPermutation($s1, $s2)
?{
? ? ?// 長度都不一致,肯定是返回false
? ? ?if (strlen($s1) != strlen($s2)) {
? ? ? ? ?return false;
? ? }
? ? ?// 從2和字符串里提取出元素組合成數組,然后進行排序,排完序在形成字符串判斷兩者是否相等
? ? ?$temp1 = [];
? ? ?$temp2 = [];
? ? ?for ($i = 0; $i < strlen($s1); $i++) {
? ? ? ? ?$temp1[] = $s1[$i];
? ? }
? ? ?for ($i = 0; $i < strlen($s2); $i++) {
? ? ? ? ?$temp2[] = $s2[$i];
? ? }
? ? ?sort($temp1);
? ? ?sort($temp2);
??
? ? ?$s1 = implode("", $temp1);
? ? ?$s2 = implode("", $temp2);
??
? ? ?return $s1 == $s2;
?}
~~~
### 找出數組中數字出現次數超過數組長度一般的數字
~~~
?/**
? * Note:數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。沒有返回null
? * @param Integer[] $nums
? * @return Integer
? */
?function majorityElement($nums)
?{
? ? ?// 數組的長度的一半
? ? ?$half_len = count($nums) / 2;
? ? ?$new_arr = array_count_values($nums);
? ? ?foreach ($new_arr as $k => $v) {
? ? ? ? ?if ($v > $half_len) {
? ? ? ? ? ? ?return $k;
? ? ? ? }
? ? }
?}
~~~
### 將字符串元素分割成一個字符串數組
~~~
?/**
? * Notes: 將字符串元素分割成一個字符串數組
? * Function: mb_str_split
? * @param $str
? * @return array|false|string[]
? * @author: Administrator - virus
? * Time: 2021/6/8 10:45
? */
?function mb_str_split($str)
?{
? ? ?return preg_split('/(?<!^)(?!$)/u', $str);
?}
~~~
### 找出0~n里不是順序的數
~~~
?/**
? * 從0~n里面順序的數里沒有的那一個
? * @param Integer[] $nums
? * @return Integer
? */
?function missingNumber($nums)
?{
? ? ?$n = count($nums);
? ? ?return (0 + $n) * ($n + 1) / 2 - array_sum($nums);
?}
~~~
### 不使用+號和其他算術運算符完成加法功能
~~~
?/**
? * 不使用+號和其他算術運算符
? * @param Integer $a
? * @param Integer $b
? * @return Integer
? */
?function add($a, $b)
?{
? ? ?while ($b != 0) {
? ? ? ? ?// 二進制異或
? ? ? ? ?$temp = $a ^ $b; // $temp = 1011
? ? ? ? ?var_dump($temp);
? ? ? ? ?$b = ($a & $b) << 1; // 1010 001 0000 << 1 0
? ? ? ? ?var_dump($b);// $b = 0
? ? ? ? ?$a = $temp; // 1011 => 11
? ? }
? ? ?return $a;
?}
~~~
### 計算一個數的階乘有多少個0
~~~
?/**
? * 計算一個數的階乘尾數有多少個0
? * @param Integer $n
? * @return Integer
? */
?function trailingZeroes($n)
?{
? ? ?$count = 0;
? ? ?while ($n > 0) {
? ? ? ? ?// 計算這個數能除以幾個5
? ? ? ? ?$count += intval($n / 5); // 5 + 1 + 0
? ? ? ? ?$n = intval($n / 5); // 5 => 1 => 0
? ? }
? ? ?return $count;
?}
~~~
### 斐波那契數列
~~~
?// 優化
?function fab($n)
?{
? ? ?$first = 0;
? ? ?$second = 1;
? ? ?$next_value = 0;
? ? ?for ($i = 2; $i <= $n; $i++) {
? ? ? ? ?$next_value = $first + $second;
? ? ? ? ?$first = $second;
? ? ? ? ?$second = $next_value;
? ? }
? ? ?return $next_value;
?}
??
?function fab1($n)
?{
? ? ?if ($n <= 0) {
? ? ? ? ?return 0;
? ? }
? ? ?if ($n == 0 || $n == 1) {
? ? ? ? ?return $n;
? ? }
? ? ?return fab1($n - 1) + fab1($n - 2);
?}
~~~
### 替換手機號碼為\*
~~~
?/**
? * Notes: 替換手機號碼某幾位為****
? * Function: phoneEllipsis
? * @param $phone
? * @param int $start
? * @param int $end
? * @return string|string[]
? * @author: Administrator - virus
? * Time: 2021/7/12 11:55
? */
?function phoneEllipsis($phone, $start = 3, $end = 4)
?{
? ? ?if ((strlen($phone) - $start) < 4) {
? ? ? ? ?return substr_replace($phone, '****', 3, 4);
? ? }
? ? ?return substr_replace($phone, '****', $start, $end);
?}
??
~~~
### 驗證手機號碼
~~~
?/**
? ? ? * Notes: 正則表達式驗證手機號碼
? ? ? * Author: Administrator - virus
? ? ? * DateTime: 2021/1/25 13:12
? ? ? * @param $phone
? ? ? * @return bool
? ? ? */
?function check_phone($phone)
?{
? ? ?if (!preg_match("/^1[345789]\d{9}$/", $phone)) {
? ? ? ? ?return false;
? ? } else {
? ? ? ? ?return true;
? ? }
?}
~~~
### 文本過長,截取部分顯示省略號
~~~
?function cutSubstr($str, $len = 10)
?{
? ? ?if (strlen($str) > $len) {
? ? ? ? ?$str = mb_substr($str, 0, $len, 'utf-8') . '...';
? ? }
? ? ?return $str;
?}
~~~
- PHP獲取客戶端瀏覽器信息和版本
- PHP獲取客戶端操作系統信息
- 無限級分類
- git使用
- 權限檢測思路
- Vue學習
- 遇到的一些問題
- PHP的編碼思維和技巧
- mysql復習
- tp5
- ThinkPHP5.x 公共函數
- TP5登錄注冊
- TP5使用模板繼承
- ThinkPHP5.1 清除緩存
- thinkphp5實現安裝程序
- 安全
- tp中實現跨域代碼
- ThinkPHP5.1配合pjax實現菜單欄無刷新跳轉
- 獲取數據庫版本和數據庫大小
- 模型的基本CURD操作
- 商品spu
- 全局異常處理類
- ExceptionHandler
- BaseException
- PHP函數之error_reporting(E_ALL ^ E_NOTICE)詳細說明
- 微信小程序
- wx:for
- tp6
- 分離的一些模塊
- session開啟
- Spring
- 依賴注入
- 數據結構
- 二叉樹
- js獲取地址欄變量
- PHP設計模式
- 面向對象
- PHP1
- PHP性能優化
- Java學習
- static關鍵字
- 多態
- 接口、階乘
- 大佬給的面試題
- 訪問量為5000萬的博客系統設計
- PHP可變參數
- Nginx的配置案例
- 求數組中的最大值,并返回數組索引
- PHP面試方向
- PHP數組工具類ArrUtil
- 字符串工具類StrUtil
- PHP使用curl發送請求
- mysql
- PHP上傳base64圖片處理函數
- webstorm小程序常用配置
- 郵箱正則表達式
- leetcode mysql記錄
- 函數庫