题解 | #剪绳子#

剪绳子

https://www.nowcoder.com/practice/57d85990ba5b440ab888fc72b0751bf8

  1. 假设分成3段,然后计算. 1,1,1. 2,2,2 3,3,2 ,最终找到3,3,2 这种切法
  2. 核心思想是,分成m段时,尽量将每段都分得均匀,这样乘积才是最大的。最后筛选出最大值

struct Solution {}

impl Solution {
    fn new() -> Self {
        Solution {}
    }

    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param n int整型
     * @return int整型
     */
    pub fn cutRope(&self, n: i32) -> i32 {
        // write code here

        let mut res = n - 1;
        for m in 2..n as usize {
            let mut tmp = Vec::with_capacity(m);
            // 初始化tmp的元素为0
            for _ in 0..m {
                tmp.push(0);
            }
            let mut i = n;
            let mut index = 0usize;
            while i > 0 {
                if let Some(v) = tmp.get_mut(index) {
                    *v += 1;
                    i -= 1;
                    index += 1;
                    index %= m;
                }
            }
            // 计算tmp val的乘积
            let mut tmp_res = 1;
            for i in &tmp {
                tmp_res *= i;
            }
            if tmp_res > res {
                res = tmp_res;
                println!("{:?}", tmp);
            }
        }
        res
    }
}

#rust#
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务