用js写算法题
var arr = [];
function toLocaleString(num) {
if (num === null) return;
//转成字符串
var nums = num.toString();
//处理字符串
process(nums);
}
function process(nums) {
if (nums.length <= 3) {
arr[arr.length] = nums;
} else {
//切割最后三个字符
arr[arr.length] = nums.slice(-3);
//留下前面
nums = nums.slice(0, nums.length - 3);
//递归
process(nums);
}
}
toLocaleString(123456789);
//反转 并 转成字符串
console.log(arr.reverse().join(','));
function getMaxLength(str) {
//最终长度
var result = 0;
//存储目前最大字串
var noRepeatStr = '';
for (var i = 0; i < str.length; i++) {
var c = str.charAt(i);
var index = noRepeatStr.indexOf(c);
if (index == -1) { //还没出现过的字符
noRepeatStr = noRepeatStr + c;
result = result < noRepeatStr.length ? noRepeatStr.length : result;
} else {
//肯定是第一个重复 取剩下的 + c
noRepeatStr = noRepeatStr.substr(1) + c;
}
}
return result;
}
console.log(getMaxLength("abcdefg"));
function sum(a, b) {
var min = Math.min(a.length, b.length);
var max = Math.max(a.length, b.length);
var length = max - min;
//字符串前面补0
for (var i = 0; i < length; i++) {
if (a.length > b.length) {
b = '0' + b;
} else {
a = '0' + a;
}
}
//转成数组并反转 (注意还是字符数组)
a = a.split('').reverse();
b = b.split('').reverse();
//初始化结果数组
var res = new Array(max);
for (var i = 0; i < max; i++) {
res[i] = 0;
}
//a、b相加
for (var i = 0; i < max; i++) {
var temp = parseInt(a[i]) + parseInt(b[i]) + parseInt(res[i]);
if (temp > 9) {
res[i] = temp - 10;
res[i + 1] = 1;
} else {
res[i] = temp;
}
}
//反转数组并转回字符串
return res.reverse().join('');
}
console.log(sum('47393245', '678794')); //48072039
function combine(arr) {
//对前两个子数组相乘
var arr1 = arr[0];
var arr2 = arr[1];
var length1 = arr1.length;
var length2 = arr2.length;
var newArr = new Array(length1 * length2);
var index = 0;
for (var i = 0; i < length1; i++) {
for (var j = 0; j < length2; j++) {
newArr[index] = arr[0][i] + "," + arr[1][j];
index++;
}
}
//更新
var Arr = new Array(arr.length - 1);
Arr[0] = newArr;
for (var i = 2; i < arr.length; i++) {
Arr[i - 1] = arr[i];
}
//递归中止条件
if (Arr.length == 1) {
return Arr[0];
} else {
return combine(Arr);
}
}
var arr = [['A1', 'B1', 'C1'], ['A2', 'B2', 'C2'], ['a3', 'b3']];
var res = combine(arr);
console.log(res);
function decidePrice() {
var n = 5;
var m = 6;
var want = [1, 2, 3, 4, 5, 6];
//记录价格
var price = 0;
//记录收益
var q = 0;
//对want数组进行升序排序
want = want.sort(function (a, b) {
return a - b;
});
//当供不应求时,不考虑出价较低者
if (n < m) {
want = want.slice(m - n);
}
//遍历算出最大q
for (var i = 0; i < want.length; i++) {
if (q < want[i] * (want.length - i)) {
q = want[i] * (want.length - i);
price = want[i];
}
}
return price;
}
console.log(decidePrice());
var s = "aaasdaddddddaf";
//存储最大长度
var count = 0;
//存储出现次数最多的字符
var char = "";
//s转换成数组并去重
function foo(s) {
//转换成数组
var arr = s.split("");
//去重
//filter过滤器 括号里一般接一个函数 返回满足条件的元素形成新的数组
//element代表元素组每一个元素
//index代表元素下标
//self可以理解为原数组arr
arr = arr.filter(function (element, index, self) {
return self.indexOf(element) === index; //第一个出现的字符,重复的就为false
});
return arr;
}
var arr = foo(s); //['a','s','d','f']
//对于原字符串,我们用不重复的字符分割,得到的新数组长度-1实际上就是该字符出现的次数
for (var i = 0; i < arr.length; i++) {
var cnt = s.split(arr[i]).length - 1;
if (cnt > count) {
count = cnt;
char = arr[i];
}
}
console.log("count:" + count + ",char:" + char);
//找到最小循环体,也许有别的方法,我这里是看出来的
var s = "1234567898765432";
function getNum(n) {
return s.charAt(n % s.length - 1);
}
console.log(getNum(22));
function changeToObj(url) {
//url形式:protocol://host[:port]/path/[?a=b&c=d]#fragment
//获取?和#的位置
var pos1 = url.indexOf('?');
var pos2 = url.indexOf('#');
var obj = {};
//获取查询片段xx=xx&xx=xx
if (pos1 == -1) { //?不存在
return obj;
} else if (pos2 != -1) { //#存在
url = url.slice(pos1 + 1, pos2);
} else {
url = url.slice(pos1 + 1);
}
// console.log(url);
//按照&分割
var urlArr = url.split('&');
// console.log(urlArr);
//按照=划分
for (var i = 0; i < urlArr.length; i++) {
var arr = urlArr[i].split('=');
//注意对象赋值属性用[]
obj[arr[0]] = arr[1];
}
return obj;
}
console.log(changeToObj("protocol://host:port/path/?a=b&c=d#fragment"));
function isPalindrome(str) {
//清除标点符号和空格 并转换成小写
var str1 = str.replace(/[^0-9a-zA-Z]/g, "").toLowerCase();
//取反 正读反读都一样的话就是回文串
var str2 = str1.split("").reverse().join("");
if (str1 == str2) {
return true;
} else {
return false;
}
}
var str = "a))b*&c..ba.."; //true
console.log(isPalindrome(str));
function forming(str) {
//先全部转成小写 根据空格划分每个单词
var arr = str.toLowerCase().split(" ");
//遍历把每个单词首字母改成大写
for (var i = 0; i < arr.length; i++) {
arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1);
}
//转回字符串
var str1 = arr.join(" ");
return str1;
}
var str = "i want to havE coffee.";
console.log(forming(str));