[LeetCode By Go 29]492. Construct the Rectangle

2103 ワード

すぐに30のテーマを书いて、golangを使ってテーマを书いてコードが简洁で明瞭で、またとても便利なテストの用例を书くことができて、Golandをプラスしてデバッグすることができて、神の助けのようです.しかし、いずれにしても、テストを書くとテスト判断の間違いに依存し、debugを使うとdebugに依存して間違いを探すのは、実は自分の脳が怠けてテストやツールに圧力をかけているので、日常開発ではコードの質と仕事の効率を高めることができますが、筆記試験の面接ではコンパイラでコードをデバッグすることはほとんどありません.テストの例を書くことは言うまでもありません.だから、あとで直接問題を解いてくれれば、テスト用例を書かないで、私も時間を節約しますか.

タイトル


For a web developer, it is very important to know how to design a web page's size. So, given a specific rectangular web page’s area, your job by now is to design a rectangular web page, whose length L and width W satisfy the following requirements:
  • The area of the rectangular web page you designed must equal to the given target area.
  • The width W should not be larger than the length L, which means L >= W.
  • The difference between length L and width W should be as small as possible.

  • You need to output the length L and the width W of the web page you designed in sequence.
    Example:
    Input: 4 Output: [2, 2] Explanation: The target area is 4, and all the possible ways to construct it are [1,4], [2,2], [4,1]. But according to requirement 2, [1,4] is illegal; according to requirement 3, [4,1] is not optimal compared to [2,2]. So the length L is 2, and the width W is 2.
    Note:
  • The given area won't exceed 10,000,000 and is a positive integer
  • The web page's width and length you designed must be positive integers.

  • 問題を解く構想.


    面積の平方根を求め、次に根を幅wとし、areaがwを整除できればl=area/w、そうでなければwが1を減らし、さらに同じ判断を行うように注意根を幅逓減判断としてもよいし、長さ増分判断としてもよい.ただし平方根を求めると小数が得られる可能性があることを考慮し、根をintに変換するとl<(area/l)となり、実際と一致しないため平方根は幅とすべきである

    コード#コード#


    constructRectangle.go
    package _492_Construct_the_Rectangle
    
    import "math"
    
    func constructRectangle(area int) []int {
        var ret []int
        sqrtArea := math.Sqrt(float64(area))
        var w int
        w = int(sqrtArea)
    
        for ; w > 0; w-- {
            if area % w == 0 {
                l := area / w
                ret = []int{l, w}
                break
            }
        }
    
        return ret
    }