给定字符串str,检查其是否连续3个(升序或降序数字),如果有,返回第一个出现的连续3个数字(或者最后一次出现的连续三个数字)
一个字符串我们来判断它是否具有三个连续的数字,很直白的想法就是临近的三个数进行判断呗,这里最需要注意的是字符串在我们比较他们是否连续的时候要进行加减操作,所以要首先注意给字符转数字后在进行其他操作,不然因为加号具有连接字符串的操作,会使题目最终得不到正确结果。
直白的解题思路:一个循坏,三个靠近的数字进行一个判断,OK直接出结果,代码附上:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>连续数字</title>
</head>
<body>
<script>
let str = "34359875064";
let flag = true;
for (let i = 0; i < str.length - 2 && flag; i++) {
let firstNum = parseInt(str[i]);
let secondNum = parseInt(str[i + 1]);
let lastNume = parseInt(str[i + 2]);
if (
(secondNum == firstNum + 1 && lastNume == secondNum + 1) ||
(firstNum == secondNum + 1 && secondNum == lastNume + 1)
) {
flag = false;
console.log(str.slice(i, i + 3));
// console.log("****");
}
}
</script>
</body>
</html>
此处也可以随机输入字符串进行判断,代码结果依然成立,只需把str定义改成:
let str = prompt("请输入一组整数数字的字符串:");
即可随机输入字符串进行试验。
当通过加法运算符时,会出现字符串连接的情况,所以必须进行字符串的转数字,那就可以换一种思路,不用加法运算符进行计算,而直接通过减法运算符进行计算,减法运算符在对于字符串进行相减的时候可以自动转换为数字,就可以省略转数字这步啦。
解题思路:判断三个数两两相减是否相等,在相等的情况下,如果差值的绝对值又是1的话,那也就是说他们是连续的。
OK,上代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>连续数字</title>
</head>
<body>
<script>
let str = "34359875064";
// let str = prompt("请输入一组整数数字的字符串:");
let flag = true;
for (let i = 0; i < str.length - 2 && flag; i++) {
if (
str[i + 1] - str[i] === str[i + 2] - str[i + 1] &&
Math.abs(str[i + 1] - str[i]) == 1
) {
flag = false;
console.log(str.slice(i, i + 3));
}
}
</script>
</body>
</html>