程序员面试金典---9

配位交换

思路:

分别保留偶数为和奇数位,然后分别右移和左移。

/**
 * @param {number} num
 * @return {number}
 */
var exchangeBits = function(num) {
    	// 用来保留奇数位
        const add = 0x55555555
        // 用来保留偶数位
        const even = 0xaaaaaaaa
        return (num & even) >> 1 | (num & add) << 1
};

绘制直线

思路,直接模拟就好

/**
 * @param {number} length
 * @param {number} w
 * @param {number} x1
 * @param {number} x2
 * @param {number} y
 * @return {number[]}
 */
var drawLine = function(length, w, x1, x2, y) {
  let res = [];
  let arr = [];
  for(let i = 0; i < 32 * length; i++) {
    arr.push(0);
  }
  if(x1 > x2) {
    let x3 = x1;
    x1 = x2;
    x2 = x3;
  }
  for(let i = 0; i < 32 * length; i++) {
    if(i >= w * y + x1 && i <= w * y + x2) {
      arr[i] = 1;
    }
  }
  let str = arr.join("");
  // console.log('str',str.slice(0, 32));
  for(let i = 0; i < 32 * length; i+=32) {
    let a = parseInt(str.slice(i, i+32), 2);
    res.push(a >> 32);
  }

  return res
};
posted @   楸枰~  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示