iT邦幫忙

1

[C#] 學習筆記-Int32.TryParse方法(LeetCode 7. Reverse Integer)

  • 分享至 

  • xImage
  •  

LeetCode題目:7. Reverse Integer
這個題目需要將輸入的整數反轉後輸出,另外需要注意的部分如下:
1.當輸入的數字為負數時,反轉的數字也要以負數表示。
 例如:輸入-123,輸出必須為-321
2.如果輸入的數字尾數為0,輸出時不顯示第一碼的0。
 例如:輸入120,輸出必須為21
3.若反轉後的數字超出int變數的範圍,就回傳0。
 即輸出的數字要在-2^31~2^31這個範圍內,如果超過就return 0。

C#中的Int32.TryParse方法,可以將字串轉換為數字,並回傳該次轉換是否成功,
所以可以針對第3點,直接對反轉後的數字進行檢核。Int32.TryParse的使用方法為:

 int.TryParse(輸入的字串, out 輸出的數字)

最後是單純用暴力解的程式碼,有非常多需要改善的部分,
請參考有使用到Int32.TryParse的部分就好🥲

public class Solution {
    public int Reverse(int x) {
        var y = x.ToString();
        int resultInt= 0;
        var result = "";
     
        if(x > 0)
        {
          //最後一個字為0時跳過不加進result字串
            for(int i = (x % 10 != 0 ? y.Length-1 : y.Length-2); i >= 0; i--)  
            {
               result += y[i]; 
            }
        }
        
        //x為負數時,先加入負號,然後將數字轉為正數後反轉
        if(x < 0)
        {
            result += "-";
            y = (x-(x*2)).ToString();//轉成正數
            for(int i = (x % 10 != 0 ? y.Length-1 : y.Length-2); i >= 0; i--) 
            {
               result += y[i]; 
            }
        }
        
        //如果int.TryParse無法將result轉成數字,就直接return 0
        if (int.TryParse(result, out resultInt) == false)
        {
           resultInt = 0;
        }
      
        return resultInt;
    }
}

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
hung19091
iT邦新手 5 級 ‧ 2023-09-14 11:29:42

感謝分享
以下提供一些小建議:

  1. for迴圈因為一定會執行,可以從if判斷式拉出來(盡量減少重複的程式碼)
  2. 數字轉正,如果用x * -1,會比較直覺
  3. int.TryParse會自動拿掉數字前面的0,因此迴圈可以不用特別判斷最後是否為0
public int Reverse(int x)
{
    var y = x.ToString();
    int resultInt = 0;
    var result = "";

    //x為負數時,先加入負號,然後將數字轉為正數後反轉
    if (x < 0)
    {
        result += "-";
        y = (x * -1).ToString();//轉成正數
    }

    for (int i = y.Length - 1; i >= 0; i--)
    {
        result += y[i];
    }

    //如果int.TryParse無法將result轉成數字,就直接return 0
    if (int.TryParse(result, out resultInt) == false)
    {
        resultInt = 0;
    }

    return resultInt;
}

喔喔 好方法 (( 筆記

非常感謝您的建議~
第一時間直接把想法轉成程式碼寫下來,
所以知道有很多需要調整的地方
不過竟然沒想到轉正數只要乘-1就好XD

我要留言

立即登入留言