#yyds干貨盤點(diǎn)# LeetCode程序員面試金典:繪制直線

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


(相關(guān)資料圖)

題目:

已知一個(gè)由像素點(diǎn)組成的單色屏幕,每行均有w?個(gè)像素點(diǎn),所有像素點(diǎn)初始為0?,左上角位置為(0,0)。

現(xiàn)將每行的像素點(diǎn)按照「每32?個(gè)像素點(diǎn)」為一組存放在一個(gè)int?中,再依次存入長(zhǎng)度為length的一維數(shù)組中。

我們將在屏幕上繪制一條從點(diǎn)(x1,y)?到點(diǎn)(x2,y)?的直線(即像素點(diǎn)修改為1),請(qǐng)返回繪制過后的數(shù)組。

注意:

用例保證屏幕寬度w?可被 32 整除(即一個(gè)int不會(huì)分布在兩行上)

示例1:

輸入:length = 1, w = 32, x1 = 30, x2 = 31, y = 0 輸出:[3] 解釋:在第 0 行的第 30 位到第 31 位畫一條直線,屏幕二進(jìn)制形式表示為 [00000000000000000000000000000011],因此返回 [3]

示例2:

輸入:length = 3, w = 96, x1 = 0, x2 = 95, y = 0 輸出:[-1, -1, -1] 解釋:由于二進(jìn)制 11111111111111111111111111111111 的 int 類型代表 -1,因此返回 [-1,-1,-1]

代碼實(shí)現(xiàn):

class Solution {    public int[] drawLine(int length, int w, int x1, int x2, int y) {        StringBuilder sb = new StringBuilder();        // 計(jì)算字符串的哪些位置需要置為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位為單位截取字符串轉(zhuǎn)化為整型。        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;    }}

標(biāo)簽: 無法處理 一維數(shù)組 可以使用

上一篇:世界快訊:#yyds干貨盤點(diǎn)# 名企真題專題:刪除重復(fù)字符
下一篇:世界速訊:#yyds干貨盤點(diǎn)# LeetCode程序員面試金典:配對(duì)交換