1. 程式人生 > 實用技巧 >leetcode刷題筆記一百七十九題 最大數

leetcode刷題筆記一百七十九題 最大數

leetcode刷題筆記一百七十九題 最大數

源地址:179. 最大數

問題描述:

給定一組非負整數,重新排列它們的順序使之組成一個最大的整數。

示例 1:

輸入: [10,2]
輸出: 210
示例 2:

輸入: [3,30,34,5,9]
輸出: 9534330

//實際上是針對數字轉字串連線 以字串形式拼接比較構成結果大小確定位置
object Solution {
    def largestNumber(nums: Array[Int]): String = {
        if (nums == null || nums.length == 0) return null
        val res = nums.map(_.toString).sortWith((x, y) => (x + y >= y + x)).mkString
        if (res.head == '0') return "0"
        else return res
    }
}

//自行實現氣泡排序 而不是修改sort的預設比較器
object Solution {
    def largestNumber(nums: Array[Int]): String = {
bubSort(nums)
    val r = nums.reverse.mkString
    if(r.charAt(0) == '0') "0" else r
    }
    /** if f larger than l */
  def compare(f: Int, l: Int): Boolean = {
    val fStr = f.toString
    val lStr = l.toString
    if (fStr + lStr > lStr + fStr) true else false
  }

  def bubSort(nums: Array[Int]): Unit = {
    for (i <- 0 until nums.length;
         j <- 0 until nums.length - i - 1;
         if compare(nums(j), nums(j + 1))) {
      val tmp = nums(j)
      nums(j) = nums(j + 1)
      nums(j + 1) = tmp
    }
  }
}