const _getUniqueNums = (start,end,n) => {
let a = [];
let count = 0;
while (count < n) {
let x = Math.floor(Math.random() * (end - start) + start)
if (a.indexOf(x) === -1) {
a.push(x);
count++;
}
}
return a;
}
解题思路:Math.random()*(end-start)+start
生成指定范围内的随机数 并且使用Math.floor()
转化为整数,判断该数字是否存在于数组中,不存在则将该数字存为数组,直到数组长度为n。
示例:
解题思路:l1
和l2
两个链表同时从头结点遍历取值,相加,如果两数相加大于0
,下一个要相加的数要注意进位
,计算得到一个数、便存入链表中,最后将
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
var addTwoNumbers = function (l1, l2) {
let node = new ListNode('0');
let head = node;
let add = 0;
while(l1 || l2 || add) {
let a = l1===null ? 0 : l1.val;
let b = l2===null ? 0 : l2.val;
let s = a + b + add;
add = s >=10 ? 1 : 0;
node.next = new ListNode(s % 10);
node = node.next;
if (l1) l1=l1.next;
if (l2) l2=l2.next;
}
return head.next;
};
输入:x = 123 输出:321
输入:x = -123 输出:-321
输入:x = 120 输出:21
/**
* @param {number} x
* @return {number}
*/
var reverse = function (x) {
let sum = 0;
let max = Math.pow(2, 31) - 1, min = -max - 1;
if (x < min || x > max) {
return 0;
}
while (x != 0) {
let a = x % 10;
x = parseInt(x / 10);
sum = sum * 10 + a;
}
if(sum > max || sum < min) {
return 0;
}
return sum;
};
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。
/**
* @param {number[]} height
* @return {number}
*/
var maxArea = function(height) {
let left=0;
let right=height.length-1;
let maxArea=0;
while(left<right) {
let currentArea=(right-left)*Math.min(height[left],height[right]);
maxArea = maxArea > currentArea ? maxArea : currentArea;
if (height[left]<height[right]) {
left++;
} else {
right--;
}
}
return maxArea;
};
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
/**
* @param {number} num
* @return {string}
*/
var intToRoman = function(num) {
let qian = ['','M','MM','MMM']; // 分别表示0,一千、两千、三千 (1<=num<=3999)
let bai = ['','C','CC','CCC','CD','D','DC','DCC','DCCC','CM'];
let shi = ['','X','XX','XXX','XL','L','LX','LXX','LXXX','XC'];
let ge = ['','I','II','III','IV','V','VI','VII','VIII','IX'];
let q = Math.floor(num/1000);
let b = Math.floor(num/100%10);
let s = Math.floor(num/10%10);
let g = Math.floor(num%10);
return qian[q] + bai[b] + shi[s] + ge[g];
};
/**
* @param {string} s
* @return {number}
*/
var romanToInt = function(s) {
let m=new Map([['I',1],['V',5],['X',10],['L',50],['C',100],['D',500],['M',1000]]);
let res=0;
for(let i=0;i<s.length;i++) {
let left=m.get(s[i]);
let right=m.get(s[i+1]);
res+=left<right?-left:left;
}
return res;
};