#yyds干货盘点# LeetCode程序员面试金典:绘制直线

2022-12-30 19:22:24 来源:51CTO博客


(相关资料图)

题目:

已知一个由像素点组成的单色屏幕,每行均有w​个像素点,所有像素点初始为0​,左上角位置为(0,0)。

现将每行的像素点按照「每32​个像素点」为一组存放在一个int​中,再依次存入长度为length的一维数组中。

我们将在屏幕上绘制一条从点(x1,y)​到点(x2,y)​的直线(即像素点修改为1),请返回绘制过后的数组。

注意:

用例保证屏幕宽度w​可被 32 整除(即一个int不会分布在两行上)

示例1:

输入:length = 1, w = 32, x1 = 30, x2 = 31, y = 0 输出:[3] 解释:在第 0 行的第 30 位到第 31 位画一条直线,屏幕二进制形式表示为 [00000000000000000000000000000011],因此返回 [3]

示例2:

输入:length = 3, w = 96, x1 = 0, x2 = 95, y = 0 输出:[-1, -1, -1] 解释:由于二进制 11111111111111111111111111111111 的 int 类型代表 -1,因此返回 [-1,-1,-1]

代码实现:

class Solution {    public int[] drawLine(int length, int w, int x1, int x2, int y) {        StringBuilder sb = new StringBuilder();        // 计算字符串的哪些位置需要置为1。        int start = y * w + x1, end = y * w + x2;        for(int i = 0;i < 32 * length; ++i){            if(sb.length() >= start && sb.length() <= end){                sb.append("1");            }            else{                sb.append("0");            }        }        int[] result = new int[length];        // 以32位为单位截取字符串转化为整型。        for(int i = 0;i < length; ++i){            // 注意此处int类型无法处理32位的1。可以使用Integer.parseUnsignedInt()或者Long.parseLong()方法。            result[i] = Integer.parseUnsignedInt(sb.substring(i * 32, i * 32 + 32), 2);        }        return result;    }}

标签: 无法处理 一维数组 可以使用

上一篇:世界快讯:#yyds干货盘点# 名企真题专题:删除重复字符
下一篇:世界速讯:#yyds干货盘点# LeetCode程序员面试金典:配对交换