/**
* @param {string} s
* @return {string}
*/
var sortSentence = function(s) {
let arr = s.split(" ");
let map = new Map();
for(let w of arr) {
let [num] = w.split("").splice(-1,1);
let tmp = w.split("");
tmp.splice(-1,1);
w = tmp.join("");
num = +num;
map.set(num, w);
}
let res= "";
for(let i=1;i<=arr.length;i++) {
res = res+" "+map.get(i);
}
return res.trim();
};
简单模拟,但暴露出一个问题,对 String的API不熟
/**
* @param {number} memory1
* @param {number} memory2
* @return {number[]}
*/
var memLeak = function(memory1, memory2) {
let i=1;
let m1 = memory1, m2=memory2;
while(m1>=i || m2>=i) {
if(m1===m2) m1-=i;
else if(m1>m2) m1-=i;
else if(m2>m1) m2-=i;
i++;
}
return [i,m1,m2];
};
引用lixiwen的推导解释为何能暴力求解
5744. 旋转盒子
使用双指针,像双指针,滑动窗口,二分等等这些需要用到left,right指针的,关键要素就是定义好left和right代表的含义
先移动石头,再 转置 顺时针翻转90°
/**
* @param {character[][]} box
* @return {character[][]}
*/
var rotateTheBox = function(box) {
//移动
for(let i=0;i<box.length;i++) {
let tmp = box[i];
let right = tmp.length-1;
let left = tmp.length-1;
while(true){
while(right>=0 && tmp[right]!==".") --right;
while(left>=0 && tmp[left]!=="#") {
if(tmp[left]==="*") right = left;
left--;
}
if(left<0) break;
if(right<left) left=right;
else if(tmp[right]!=="*" && right>left){
tmp[left] = ".";
tmp[right] = "#";
}
}
}
//转置
let arr = [];
for(let j=0;j<box[0].length;j++) {
let tmp = [];
for(let i=box.length-1;i>=0;i--) tmp.push(box[i][j]);
arr.push(tmp);
}
return arr;
};