zoukankan      html  css  js  c++  java
  • [Swift]LeetCode441. 排列硬币 | Arranging Coins

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10339427.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    You have a total of n coins that you want to form in a staircase shape, where every k-th row must have exactly k coins.

    Given n, find the total number of fullstaircase rows that can be formed.

    n is a non-negative integer and fits within the range of a 32-bit signed integer.

    Example 1:

    n = 5
    
    The coins can form the following rows:
    ¤
    ¤ ¤
    ¤ ¤
    
    Because the 3rd row is incomplete, we return 2. 

    Example 2:

    n = 8
    
    The coins can form the following rows:
    ¤
    ¤ ¤
    ¤ ¤ ¤
    ¤ ¤
    
    Because the 4th row is incomplete, we return 3.

    你总共有 枚硬币,你需要将它们摆成一个阶梯形状,第 行就必须正好有 枚硬币。

    给定一个数字 n,找出可形成完整阶梯行的总行数。

    是一个非负整数,并且在32位有符号整型的范围内。

    示例 1:

    n = 5
    
    硬币可排列成以下几行:
    ¤
    ¤ ¤
    ¤ ¤
    
    因为第三行不完整,所以返回2.
    

    示例 2:

    n = 8
    
    硬币可排列成以下几行:
    ¤
    ¤ ¤
    ¤ ¤ ¤
    ¤ ¤
    
    因为第四行不完整,所以返回3.

    20ms
    1 class Solution {
    2     func arrangeCoins(_ n: Int) -> Int {
    3         return Int((-1 + sqrt(Double(1 + 8 * n))) / 2)
    4     }
    5 }

    28ms

     1 class Solution {
     2     func arrangeCoins(_ n: Int) -> Int {
     3             guard n > 1 else {
     4         return n
     5     }
     6     var index = n, lhs = 0, rhs = n, mid = 0
     7     while lhs < rhs {
     8         mid = (rhs + lhs) / 2
     9         let result = (1 + mid) * mid / 2
    10         if result == n {
    11             return mid
    12         } else if result > n {
    13             rhs = mid
    14         } else {
    15             lhs = mid + 1
    16         }
    17     }
    18     return lhs - 1
    19     }
    20 }

    36ms

     1 class Solution {
     2     func arrangeCoins(_ n: Int) -> Int {
     3         var left = 1
     4         var right = n
     5 
     6         while left <= right {
     7             let mid = left + (right - left) / 2
     8             if n * 2 < mid * (mid + 1) {
     9                 right = mid - 1
    10             } else {
    11                 left = mid + 1
    12             }
    13         }
    14 
    15         return left - 1
    16     }
    17 }

    52ms

    1 class Solution {
    2     func arrangeCoins(_ n: Int) -> Int {
    3         var result = Int(sqrt(Double(n * 2))) - 1
    4         while result * (result + 1) / 2 <= n {
    5             result += 1
    6         }
    7         return result - 1
    8     }    
    9 }

    80ms

     1 class Solution {
     2     func arrangeCoins(_ n: Int) -> Int {
     3         var row = 1
     4         var sum = row
     5         while true {
     6             if sum == n {
     7                 return row
     8             } else if sum > n {
     9                 return row - 1
    10             }
    11             row += 1
    12             sum += row
    13         }
    14     }
    15 }

    176ms

     1 class Solution {
     2     func arrangeCoins(_ n: Int) -> Int {
     3     return self.lineCoins(n, 1)
     4     }
     5         func lineCoins(_ n: Int, _ line: Int) -> Int {
     6         if n<line {
     7             return line-1
     8         }
     9         return lineCoins(n-line, line+1);
    10     }
    11 }

    204ms

     1 class Solution {
     2     func arrangeCoins(_ n: Int) -> Int {
     3         if n == 0 || n == 1 {
     4             return n
     5         }
     6         for value in 1...n {
     7             if Double((1 + value) * value) * 0.5 > Double(n) {
     8                 return (value - 1)
     9             }
    10         }
    11         return 0
    12     }
    13 }
  • 相关阅读:
    java输入一个文件夹,查找出所有的文件列表
    java字节流到字符流的桥梁InputStreamReader,OutputStreamWriter
    java中获取用户输入字符,并将字符大写后显示
    mqtt
    tcpcopy
    lmax disruptor
    delete solr index
    http://book.douban.com/doulist/2545443/
    http://www.dottoro.com/
    最值得学习阅读的10个C语言开源项目代码
  • 原文地址:https://www.cnblogs.com/strengthen/p/10339427.html
Copyright © 2011-2022 走看看