這是悅樂書的第219次更新风瘦,第231篇原創(chuàng)
01 看題和準(zhǔn)備
今天介紹的是LeetCode算法題中Easy級別的第86題(順位題號是405)子房。給定一個(gè)整數(shù)付呕,寫一個(gè)算法將其轉(zhuǎn)換為十六進(jìn)制延曙。對于負(fù)整數(shù)芹务,使用二進(jìn)制補(bǔ)碼方法民晒。例如:
輸入:26
輸出:“1a”
輸入:-1
輸出:“ffffffff”
注意:
十六進(jìn)制(a-f)中的所有字母必須為小寫。
十六進(jìn)制字符串不得包含額外的前導(dǎo)0锄禽。如果數(shù)字為零,則由單個(gè)零字符“0”表示;否則靴姿,十六進(jìn)制字符串中的第一個(gè)字符將不是零字符沃但。
保證給定數(shù)字適合32位有符號整數(shù)的范圍。
您不得使用庫提供的任何方法將數(shù)字直接轉(zhuǎn)換或者格式化為十六進(jìn)制佛吓。
本次解題使用的開發(fā)工具是eclipse宵晚,jdk使用的版本是1.8,環(huán)境是win7 64位系統(tǒng)维雇,使用Java語言編寫和測試淤刃。
02 第一種解法
直接使用包裝類Integer的toHexString方法,將num轉(zhuǎn)為16進(jìn)制字符串吱型。
public String toHex(int num) {
return Integer.toHexString(num);
}
03 第二種解法
此解法的思路來自于String toHexString(int i)的源代碼逸贾,先將16進(jìn)制所用到的字符放入一個(gè)字符數(shù)組,從'0'到'f'依次排列,再定義一個(gè)字符串铝侵。先將num和15進(jìn)行與(&)運(yùn)算灼伤,與運(yùn)算的規(guī)則是同1為1,即將num轉(zhuǎn)為二進(jìn)制數(shù)和二進(jìn)制數(shù)1111做運(yùn)算咪鲜,得到的結(jié)果即為對應(yīng)字符數(shù)組中的第幾位字符狐赡,然后將num無符號右移4位,只要num不等于0疟丙,就一直循環(huán)計(jì)算颖侄。最后返回result。
核心思路是每次取出最右邊的四位進(jìn)行與運(yùn)算享郊。
public String toHex2(int num) {
if (num == 0) {
return "0";
}
char[] ch = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
String result = "";
while (num != 0) {
result = ch[num&15] + result;
num >>>= 4;
}
return result;
}
04 小結(jié)
算法專題目前已連續(xù)日更超過兩個(gè)月览祖,算法題文章86+篇,公眾號對話框回復(fù)【數(shù)據(jù)結(jié)構(gòu)與算法】拂蝎、【算法】穴墅、【數(shù)據(jù)結(jié)構(gòu)】中的任一關(guān)鍵詞,獲取系列文章合集温自。
以上就是全部內(nèi)容玄货,如果大家有什么好的解法思路、建議或者其他問題悼泌,可以下方留言交流松捉,點(diǎn)贊、留言馆里、轉(zhuǎn)發(fā)就是對我最大的回報(bào)和支持隘世!