這是悅樂書的第247次更新,第260篇原創(chuàng)
今天介紹的是LeetCode算法題中Easy級別的第114題(順位題號是504)。給定一個整數(shù),返回其基數(shù)為7的字符串表示。例如:
輸入:100
輸出:“202”
輸入:-7
輸出:“-10”
注意:輸入范圍為[-1e7,1e7]。
本次解題使用的開發(fā)工具是eclipse,jdk使用的版本是1.8,環(huán)境是win7 64位系統(tǒng),使用Java語言編寫和測試。
直接使用包裝類Integer的toString(arg, arg2)方法,將arg轉(zhuǎn)為對應arg2進制的字符串。
public String convertToBase7(int num) { return Integer.toString(num, 7);}
利用迭代的思路來正常解。
特殊情況:當num為0的時候,直接返回字符串0。
正常情況:如果num為負數(shù),先將其轉(zhuǎn)為正數(shù),并做一個標記。為了將num轉(zhuǎn)為7進制的字符串,肯定離不開取余和除法。
我們先來看看題目所給示例100,其7進制數(shù)為202,可以將其拆分為2x7x7 0x7 2,從后往前看,最后一位是將100對7取余,余數(shù)為2,再將其除以7,因為已經(jīng)計算了一位,得到14,14再對7取余,余數(shù)為0,再將其除以7,得到商為2,2再對7取余,余數(shù)為2,2再除以7,商為0,循環(huán)結(jié)束。
所以,思路就是取余后,再除以7,直到num等于0,如果有負號,最后在補上去。
public String convertToBase7_2(int num) { if (num == 0) { return "0"; } StringBuilder sb = new StringBuilder(); boolean flag = false; if (num < 0) { flag = true; } num = Math.abs(num); while (num != 0) { sb.append(num%7); num /= 7; } if (flag) { sb.append("-"); } return sb.reverse().toString();}
利用遞歸的思路。
第二種解法是利用迭代,我們也可以利用遞歸的方法。如果num為負數(shù),先將其轉(zhuǎn)為正數(shù)再參與計算,如果num小于7,直接返回以num為值的字符串,然后調(diào)用自身,新參數(shù)為num除以7,并且要連接上num對7取余的余數(shù)。
public String convertToBase7_3(int num) { if (num < 0) { return "-" convertToBase7_3(-num); } if (num < 7) { return num ""; } return convertToBase7_3(num/7) num%7;}
算法專題目前已日更超過三個月,算法題文章114 篇,公眾號對話框回復【數(shù)據(jù)結(jié)構(gòu)與算法】、【算法】、【數(shù)據(jù)結(jié)構(gòu)】中的任一關(guān)鍵詞,獲取系列文章合集。
以上就是全部內(nèi)容,如果大家有什么好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、轉(zhuǎn)發(fā)就是對我最大的回報和支持!
來源:http://www.icode9.com/content-1-112651.html