关于java:LeetCode–绘制直线

41次阅读

共计 756 个字符,预计需要花费 2 分钟才能阅读完成。

LeetCode–绘制直线

<!– more –>

博客阐明

文章所波及的材料来自互联网整顿和集体总结,意在于集体学习和教训汇总,如有什么中央侵权,请分割自己删除,谢谢!

阐明

面试题 05.08. 绘制直线

题目

绘制直线。有个单色屏幕存储在一个一维数组中,使得 32 个间断像素能够寄存在一个 int 里。屏幕宽度为 w,且 w 可被 32 整除(即一个 int 不会散布在两行上),屏幕高度可由数组长度及屏幕宽度推算得出。请实现一个函数,绘制从点 (x1, y) 到点 (x2, y) 的水平线。

给出数组的长度 length,宽度 w(以比特为单位)、直线开始地位 x1(比特为单位)、直线完结地位 x2(比特为单位)、直线所在行数 y。返回绘制过后的数组。

示例 1 :

 输出:length = 1, w = 32, x1 = 30, x2 = 31, y = 0
 输入:[3]
 阐明:在第 0 行的第 30 位到第 31 为画一条直线,屏幕示意为[0b000000000000000000000000000000011]

示例 2 :

 输出:length = 3, w = 96, x1 = 0, x2 = 95, y = 0
 输入:[-1, -1, -1]

Java

思路

应用位运算

代码
class Solution {public int[] drawLine(int length, int w, int x1, int x2, int y) {int[] res = new int[length];
        int temp = y * w / 32;
        int head = x1 / 32 + temp;
        int rear = x2 / 32 + temp;
        for(int i = head; i <= rear; i++){res[i] = -1;
        }
        res[head] = res[head] & -1 >>> x1 % 32;
        res[rear] = res[rear] & Integer.MIN_VALUE >> x2 % 32;
        return res;
    }
}

感激

leetcode

以及勤奋的本人

正文完
 0