力扣算法题简单(七)

    1. 七进制数
    public string ConvertToBase7(int num)
    {
        if (num == 0) return "0";
        StringBuilder sb = new StringBuilder();
        int n = num > 0 ? num : -num;
        while (n > 0)
        {
            var r = n % 7;
            n /= 7;
            sb.Append(r);
        }

        char[] charArr = sb.ToString().ToCharArray();
        Array.Reverse(charArr);
        if (num > 0) return new string(charArr);
        return "-" + new string(charArr);
    }
    1. 二叉搜索树中的众数
  public int[] FindMode(TreeNode root)
    {
        var res = Go(root);

        SortedDictionary<int, int> dic = new SortedDictionary<int, int>();

        for (int i = 0; i < res.Count; i++)
        {
            if (!dic.ContainsKey(res[i]))
            {
                dic[res[i]] = 1;
            }
            else
            {
                dic[res[i]] += 1;
            }
        }

        int max = 0;
        foreach (var VARIABLE in dic)
        {
            if (VARIABLE.Value >= max)
            {
                max = VARIABLE.Value;
            }
        }

        List<int> res2 = new List<int>();
        foreach (var VARIABLE in dic)
        {
            if (VARIABLE.Value == max)
            {
                res2.Add(VARIABLE.Key);
            }
        }


        return res2.ToArray();
    }

    public List<int> Go(TreeNode root)
    {
        List<int> list = new List<int>();
        if (root == null) return list;
        list.AddRange(Go(root?.left));
        list.Add(root.val);
        list.AddRange(Go(root?.right));
        return list;
    }
    1. 二叉树的最小深度
    public int MinDepth(TreeNode root)
    {
        if (root == null) { return 0; }
        //树的层序遍历 可以求出最短深度
        Queue<TreeNode> q = new Queue<TreeNode>();
        q.Enqueue(root);
        int depth = 1;
        while (q.Any())
        {
            int count = q.Count;
            while (count > 0)
            {
                TreeNode tem = q.Dequeue();
                if (tem.left == null && tem.right == null) { return depth; }
                if (tem.left != null)
                {
                    q.Enqueue(tem.left);
                }
                if (tem.right != null)
                {
                    q.Enqueue(tem.right);
                }
                count--;
            }
            depth++;
        }
        return depth;
    }
    1. 阶乘后的零
    public int TrailingZeroes(int n)
    {
        if (n == 0) return 0;
        int count5 = 0;
        while (n > 0)
        {
            count5 += n / 5;
            n /= 5;
        }

        return count5;
    }
    1. K 次取反后最大化的数组和
    public int LargestSumAfterKNegations(int[] A, int K)
    {
        int min,index;
        for (int i = 0; i < A.Length; i++)
        {
            if (i < K)
            {
                min = A.Min();
                index = Array.IndexOf(A, min);
                A[index] = -min;
            }
        }

        return A.Sum();
    }
    1. 猜数字大小
    public int guessNumber(int n) {
        int l = 1;
        int r = n;
        
        while (l <= r) {
            int mid = l + (r - l) / 2;
            int guess = guess(mid);
            if (guess == 0) {
                return mid;
            } else if (guess > 0) {
                l = mid + 1;
            } else {
                r = mid - 1;
            }
        }
        
        return 0;
    }
    1. 3的幂

    public bool IsPowerOfThree(int n)
    {
        if (n < 1) return false;
        while (n % 3 == 0)
        {
            n /= 3;
        }
        return n == 1;
    }

    1. 搜索插入位置
 public int SearchInsert(int[] nums, int target)
    {
        SortedList<int, int> sortCollections = new SortedList<int, int>();
        if (!nums.Contains(target))
        {
            for (int i = 0; i < nums.Length; i++)
            {
                sortCollections.Add(nums[i], nums[i]);
            }
            sortCollections.Add(target, target);
            int tempValue = 0;
            foreach (var VARIABLE in sortCollections)
            {
                if (VARIABLE.Value == target)
                {

                    break;

                }
                tempValue++;
            }

            return tempValue;
        }
        else
        {
            return Array.IndexOf(nums, target);
        }
    }
    1. 加一
  for (int i = digits.Length - 1; i >= 0; i--)
        {
            if (++digits[i] != 10)
            {
                return digits;
            }
            else
            {
                digits[i] = 0;
                if (i == 0)
                {
                    int[] newDigits = new int[digits.Length + 1];
                    for (int j = 0; j < digits.Length; j++)
                    {
                        newDigits[j + 1] = digits[j];
                    }

                    newDigits[0] = 1;
                    return newDigits;
                }
            }
        }

        return null;

猜你喜欢

转载自blog.csdn.net/qq_37811712/article/details/89305122