Datawhole第二天打卡7家乘、8、9

第一題:整數(shù)反轉(zhuǎn)

給出一個(gè) 32 位的有符號整數(shù)胆建,你需要將這個(gè)整數(shù)中每位上的數(shù)字進(jìn)行反轉(zhuǎn)烤低。

示例 1:

輸入:123輸出:321

示例 2:

輸入: -123輸出: -321

示例 3:

輸入:120輸出:21

示例 4:

輸入:1534236469輸出:0

示例 5:

輸入: -2147483648輸出:0

注意:

假設(shè)我們的環(huán)境只能存儲得下 32 位的有符號整數(shù)肘交,則其數(shù)值范圍為[?2^31, 2^31 ? 1]笆载。請根據(jù)這個(gè)假設(shè),如果反轉(zhuǎn)后整數(shù)溢出那么就返回 0涯呻。

public int Reverse(int x) {

? ? ? ? if (x == int.MinValue)

? ? ? ? ? ? return 0;

? ? ? ? long result = 0;

? ? ? ? int negative = x < 0 ? -1 : 1;

? ? ? ? x = negative * x;

? ? ? ? Queue<int> q = new Queue<int>();

? ? ? ? while (x != 0)

? ? ? ? {

? ? ? ? ? ? q.Enqueue(x % 10);

? ? ? ? ? ? x = x/10;

? ? ? ? }


? ? ? ? while (q.Count != 0)

? ? ? ? {

? ? ? ? ? ? result += q.Dequeue()*(long) Math.Pow(10, q.Count);

? ? ? ? ? ? if (negative == 1 && result > int.MaxValue)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? result = 0;

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? }

? ? ? ? ? ? if (negative == -1 && result*-1 < int.MinValue)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? result = 0;

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? return (int)result*negative;? ? ? ?

? ? }

初始值設(shè)為0凉驻,通過設(shè)置一個(gè)隊(duì)列,將負(fù)數(shù)變?yōu)檎龜?shù)复罐,因?yàn)檎龜?shù)可以統(tǒng)一進(jìn)行運(yùn)算處理涝登,最后再把負(fù)號加上樟凄。

第二題字符串轉(zhuǎn)換整數(shù)

請你來實(shí)現(xiàn)一個(gè) atoi 函數(shù)跟磨,使其能將字符串轉(zhuǎn)換成整數(shù)徘跪。

首先火架,該函數(shù)會根據(jù)需要丟棄無用的開頭空格字符嗅战,直到尋找到第一個(gè)非空格的字符為止寄悯。

當(dāng)我們尋找到的第一個(gè)非空字符為正或者負(fù)號時(shí)招刨,則將該符號與之后面盡可能多的連續(xù)數(shù)字組合起來暖释,作為該整數(shù)的正負(fù)號戚炫;假如第一個(gè)非空字符是數(shù)字剑刑,則直接將其與之后連續(xù)的數(shù)字字符組合起來,形成整數(shù)。

該字符串除了有效的整數(shù)部分之后也可能會存在多余的字符施掏,這些字符可以被忽略钮惠,它們對于函數(shù)不應(yīng)該造成影響。

注意:假如該字符串中的第一個(gè)非空格字符不是一個(gè)有效整數(shù)字符七芭、字符串為空或字符串僅包含空白字符時(shí)素挽,則你的函數(shù)不需要進(jìn)行轉(zhuǎn)換。

在任何情況下狸驳,若函數(shù)不能進(jìn)行有效的轉(zhuǎn)換時(shí)毁菱,請返回 0。

說明:

假設(shè)我們的環(huán)境只能存儲 32 位大小的有符號整數(shù)锌历,那么其數(shù)值范圍為 [?2^31, 2^31? 1]贮庞。如果數(shù)值超過這個(gè)范圍,請返回 INT_MAX (2^31? 1) 或 INT_MIN (?2^31) 究西。

示例 1:

輸入: "42"

輸出: 42

示例 2:

輸入: "? -42"

輸出: -42

解釋: 第一個(gè)非空白字符為 '-', 它是一個(gè)負(fù)號窗慎。

我們盡可能將負(fù)號與后面所有連續(xù)出現(xiàn)的數(shù)字組合起來,最后得到 -42 卤材。

示例 3:

輸入: "4193 with words"

輸出: 4193

解釋: 轉(zhuǎn)換截止于數(shù)字 '3' 遮斥,因?yàn)樗南乱粋€(gè)字符不為數(shù)字。

示例 4:

輸入: "words and 987"

輸出: 0

解釋: 第一個(gè)非空字符是 'w', 但它不是數(shù)字或正扇丛、負(fù)號术吗。

因此無法執(zhí)行有效的轉(zhuǎn)換。

示例 5:

輸入: "-91283472332"

輸出: -2147483648

解釋: 數(shù)字 "-91283472332" 超過 32 位有符號整數(shù)范圍帆精。

因此返回 INT_MIN (?231) 较屿。

示例 6:

輸入: "? 0000000000012345678"

輸出: 12345678

示例 7:

輸入: "20000000000000000000"

輸出: 2147483647

public int Atoi(string str) {

? ? ? ? str = str.Trim();

? ? ? ? if (string.IsNullOrEmpty(str))

? ? ? ? ? ? return 0;

? ? ? ? if (str[0] != '-' && str[0] != '+')

? ? ? ? {

? ? ? ? ? ? if (str[0] < '0' || str[0] > '9')

? ? ? ? ? ? ? ? return 0;

? ? ? ? }

? ? ? ? int negative = 1;

? ? ? ? long result = 0;

? ? ? ? Queue<int> q = new Queue<int>();

? ? ? ? for (int i = 0; i < str.Length; i++)

? ? ? ? {

? ? ? ? ? ? if (str[i] == '-' && i == 0)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? negative = -1;

? ? ? ? ? ? ? ? continue;

? ? ? ? ? ? }

? ? ? ? ? ? if (str[i] == '+' && i == 0)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? continue;

? ? ? ? ? ? }

? ? ? ? ? ? if (str[i] < '0' || str[i] > '9')

? ? ? ? ? ? {

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? }

? ? ? ? ? ? q.Enqueue(str[i] - '0');

? ? ? ? }

? ? ? ? while (q.Count != 0)

? ? ? ? {

? ? ? ? ? ? int i = q.Dequeue();

? ? ? ? ? ? //去掉隊(duì)列前端的零

? ? ? ? ? ? if (i == 0 && result == 0)

? ? ? ? ? ? ? ? continue;


? ? ? ? ? ? // 返回超過位數(shù)的數(shù)字

? ? ? ? ? ? if (negative == 1 && q.Count > 10)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? return int.MaxValue;

? ? ? ? ? ? }

? ? ? ? ? ? if (negative == -1 && q.Count > 10)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? return int.MinValue;

? ? ? ? ? ? }

? ? ? ? ? ? result += i * (long)Math.Pow(10, q.Count);

? ? ? ? ? ? if (negative == 1 && result > int.MaxValue)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? return int.MaxValue;

? ? ? ? ? ? }

? ? ? ? ? ? if (negative == -1 && result * -1 < int.MinValue)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? return int.MinValue;

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? return (int)result * negative;? ? ? ?

? ? }

將字符串存儲在一個(gè)隊(duì)列中,遍歷隊(duì)列:如果是負(fù)數(shù)卓练,將negative置為-1隘蝎,否則的話不變。然后統(tǒng)計(jì)字符串的位數(shù)襟企,賦值給i嘱么,最后根據(jù)i的范圍來返回值。

第三題 回文數(shù)

判斷一個(gè)整數(shù)是否是回文數(shù)顽悼÷瘢回文數(shù)是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數(shù)。

示例 1:

輸入:121輸出:true

示例 2:

輸入: -121輸出:false解釋: 從左向右讀, 為 -121蔚龙。 從右向左讀, 為121- 冰评。因此它不是一個(gè)回文數(shù)。

示例 3:

輸入:10輸出:false解釋: 從右向左讀, 為01府蛇。因此它不是一個(gè)回文數(shù)集索。

public bool IsPalindrome(int x) {

? ? ? ? if (x < 0)

? ? ? ? ? ? return false;

? ? ? ? int digit = 1;

? ? ? ? while (x / digit >= 10)

? ? ? ? {

? ? ? ? ? ? digit = digit * 10;

? ? ? ? }

? ? ? ? while (x > 0)

? ? ? ? {

? ? ? ? ? ? int left = x % 10;

? ? ? ? ? ? int right = x / digit;

? ? ? ? ? ? if (left != right)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? return false;

? ? ? ? ? ? }

? ? ? ? ? ? x = (x % digit) / 10;

? ? ? ? ? ? digit = digit / 100;

? ? ? ? }

? ? ? ? return true;

先將位數(shù)digit初始化為1,將字符串分為left和right,從中間向兩邊遍歷搜索直到left與right不相等為止务荆。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末妆距,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子函匕,更是在濱河造成了極大的恐慌娱据,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盅惜,死亡現(xiàn)場離奇詭異中剩,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)抒寂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門结啼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人屈芜,你說我怎么就攤上這事郊愧。” “怎么了井佑?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵属铁,是天一觀的道長。 經(jīng)常有香客問我躬翁,道長焦蘑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任盒发,我火速辦了婚禮例嘱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘迹辐。我一直安慰自己蝶防,他們只是感情好甚侣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布明吩。 她就那樣靜靜地躺著,像睡著了一般殷费。 火紅的嫁衣襯著肌膚如雪印荔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天详羡,我揣著相機(jī)與錄音仍律,去河邊找鬼。 笑死实柠,一個(gè)胖子當(dāng)著我的面吹牛水泉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼草则,長吁一口氣:“原來是場噩夢啊……” “哼钢拧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起炕横,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤源内,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后份殿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膜钓,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年卿嘲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了颂斜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拾枣,死狀恐怖焚鲜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情放前,我是刑警寧澤忿磅,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站凭语,受9級特大地震影響葱她,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜似扔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一吨些、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧炒辉,春花似錦豪墅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缝裤,卻和暖如春屏轰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背憋飞。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工霎苗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人榛做。 一個(gè)月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓唁盏,卻偏偏與公主長得像内狸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子厘擂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容