LeetCode 7 整数反转
//暴力,需要注意最大边界值。
var reverse = function(x) {
let res = [];
let bool = 0;
bool = x>=0?0:1;
x = x>=0?x:-x;
let store = 0;
while(x!=0){
store = x%10;
res.push(store);
x = Math.floor(x/10);
}
console.log(res);
for(let i of res){
x = x*10 + i;
}
if(x>2147483647) return 0;
return x = bool===0?x:-x;
};
//优化写法,这里取整不能用Math.floor(),不适用于负数。
var reverse = function (x) {
let res = 0;
while (x) {
res = res * 10 + x % 10
// 判断越界
if (res > Math.pow(2, 31) - 1 || res < Math.pow(-2, 31)) return 0;
// 对 x 进行取整,只取整数部分
x = ~~(x / 10);
}
return res
};
//将数字转为字符串翻转,再转为数字,判断边界。
var reverse = function(x) {
let res = parseInt(x.toString().split("").reverse().join(""));
res = x>=0?res:-res;
return res>Math.pow(2,31)-1||res<Math.pow(-2,31)?0:res;
};
LeetCode 387 字符串中的第一个唯一字符
//对数组进行两次遍历,只有遍历到结尾且与之相等的数字只有其本身时,才找到了第一个唯一值。
var firstUniqChar = function(s) {
let len = s.length;
for(let i = 0;i<len;){
for(let j = 0; j<len;j++){
if(s[i]===s[j]&&i!=j){
i++;
break;
}
else{
if(j===len-1){
return i;
}
}
}
}
return -1;
};
//借助哈希表
var firstUniqChar = function(s) {
let map = new Map();
for(let i of s){
if(map.has(i)){
map.set(i,map.get(i)+1)
}
else{
map.set(i,1);
}
}
for(let i in s){
Number(i);
if(map.get(s[i])===1) return i;
}
return -1;
};
LeetCode 242有效的字母异位词
//暴力
var isAnagram = function(s, t) {
let map1= new Map();
let map2 = new Map();
if(s.length!==t.length) return false;
for(let i in s){
Number(i);
if(map1.has(s[i])){
map1.set(s[i],map1.get(s[i])+1);
}
else{
map1.set(s[i],1);
}
if(map2.has(t[i])){
map2.set(t[i],map2.get(t[i])+1);
}
else{
map2.set(t[i],1);
}
}
for(let i in s){
if(map1.get(s[i])!==map2.get(s[i])){
return false;
}
}
return true;
};
//官方一句话,谁能想到用解构赋值,我可能一个个读一个个push,再join。
var isAnagram = function(s, t) {
return s.length===t.length&&[...s].sort().join("")===[...t].sort().join("");
//return s.length===t.length&&Array.from(s).sort().join("")===Array.from(t).sort().join("");
};
//优化后的哈希,前面解数独也用到了这种索引对应的思想。
var isAnagram = function(s, t) {
if(s.length!==t.length) return false;
let arr = new Array(26).fill(0);
for(let i in s){
Number(i);
arr[s[i].charCodeAt()-'a'.charCodeAt()]++;
arr[t[i].charCodeAt()-'a'.charCodeAt()]--;
}
for(let i in s){
Number(i);
if(arr[s[i].charCodeAt()-'a'.charCodeAt()]!==0){
return false;
}
}
return true;
};
LeetCode 125 验证回文串
//纯判断数字和字母了
var isPalindrome = function(s) {
if(s.length===0) return true;
let left = 0;
let right = s.length-1;
while(left<right){
if(isNumchar(s[left])!=0){
if(isNumchar(s[right])!=0){
if(isNumchar(s[left])===isNumchar(s[right])){
left++;
right--;
}
else{
console.log(s[left],s[right],isNumchar(s[left]),isNumchar(s[right]))
return false;
}
}
else{
right--;
}
}
else{
left++;
}
}
return true;
};
var isNumchar = (x) =>{
let tmp = x.charCodeAt();
if(tmp>='0'.charCodeAt()&&tmp<='9'.charCodeAt()){
return tmp
}
if(tmp>='A'.charCodeAt()&&tmp<='Z'.charCodeAt()){
return tmp+'a'.charCodeAt()-'A'.charCodeAt();
}
if(tmp>='a'.charCodeAt()&&tmp<='z'.charCodeAt()){
return tmp;
}
re