### 获取最长公共前缀
~~~
/**
* 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记录
- 函数库